tidb hintparser 源码

  • 2022-09-19
  • 浏览 (205)

tidb hintparser 代码

文件路径:/parser/hintparser.go

// Code generated by goyacc DO NOT EDIT.

// Copyright 2020 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.

package parser

import __yyfmt__ "fmt"

import (
	"math"
	"strconv"

	"github.com/pingcap/tidb/parser/ast"
	"github.com/pingcap/tidb/parser/model"
)

type yyhintSymType struct {
	yys         int
	offset      int
	ident       string
	number      uint64
	hint        *ast.TableOptimizerHint
	hints       []*ast.TableOptimizerHint
	table       ast.HintTable
	modelIdents []model.CIStr
}

type yyhintXError struct {
	state, xsym int
}

const (
	yyhintDefault             = 57420
	yyhintEOFCode             = 57344
	yyhintErrCode             = 57345
	hintAggToCop              = 57379
	hintBCJoin                = 57392
	hintBKA                   = 57355
	hintBNL                   = 57357
	hintDupsWeedOut           = 57416
	hintFalse                 = 57412
	hintFirstMatch            = 57417
	hintForceIndex            = 57403
	hintGB                    = 57415
	hintHashAgg               = 57381
	hintHashJoin              = 57359
	hintHashJoinBuild         = 57360
	hintHashJoinProbe         = 57361
	hintIdentifier            = 57347
	hintIgnoreIndex           = 57382
	hintIgnorePlanCache       = 57380
	hintIndexMerge            = 57365
	hintInlHashJoin           = 57383
	hintInlJoin               = 57384
	hintInlMergeJoin          = 57385
	hintIntLit                = 57346
	hintInvalid               = 57348
	hintJoinFixedOrder        = 57351
	hintJoinOrder             = 57352
	hintJoinPrefix            = 57353
	hintJoinSuffix            = 57354
	hintLeading               = 57405
	hintLimitToCop            = 57402
	hintLooseScan             = 57418
	hintMB                    = 57414
	hintMRR                   = 57367
	hintMaterialization       = 57419
	hintMaxExecutionTime      = 57375
	hintMemoryQuota           = 57386
	hintMerge                 = 57363
	hintNoBKA                 = 57356
	hintNoBNL                 = 57358
	hintNoHashJoin            = 57362
	hintNoICP                 = 57369
	hintNoIndexMerge          = 57366
	hintNoMRR                 = 57368
	hintNoMerge               = 57364
	hintNoRangeOptimization   = 57370
	hintNoSemijoin            = 57374
	hintNoSkipScan            = 57372
	hintNoSwapJoinInputs      = 57387
	hintNthPlan               = 57401
	hintOLAP                  = 57407
	hintOLTP                  = 57408
	hintPartition             = 57409
	hintQBName                = 57378
	hintQueryType             = 57388
	hintReadConsistentReplica = 57389
	hintReadFromStorage       = 57390
	hintResourceGroup         = 57377
	hintSMJoin                = 57391
	hintSemiJoinRewrite       = 57406
	hintSemijoin              = 57373
	hintSetVar                = 57376
	hintSingleAtIdentifier    = 57349
	hintSkipScan              = 57371
	hintStraightJoin          = 57404
	hintStreamAgg             = 57393
	hintStringLit             = 57350
	hintSwapJoinInputs        = 57394
	hintTiFlash               = 57411
	hintTiKV                  = 57410
	hintTimeRange             = 57399
	hintTrue                  = 57413
	hintUseCascades           = 57400
	hintUseIndex              = 57396
	hintUseIndexMerge         = 57395
	hintUsePlanCache          = 57397
	hintUseToja               = 57398

	yyhintMaxDepth = 200
	yyhintTabOfs   = -180
)

var (
	yyhintXLAT = map[int]int{
		41:    0,   // ')' (134x)
		57379: 1,   // hintAggToCop (126x)
		57392: 2,   // hintBCJoin (126x)
		57355: 3,   // hintBKA (126x)
		57357: 4,   // hintBNL (126x)
		57403: 5,   // hintForceIndex (126x)
		57381: 6,   // hintHashAgg (126x)
		57359: 7,   // hintHashJoin (126x)
		57360: 8,   // hintHashJoinBuild (126x)
		57361: 9,   // hintHashJoinProbe (126x)
		57382: 10,  // hintIgnoreIndex (126x)
		57380: 11,  // hintIgnorePlanCache (126x)
		57365: 12,  // hintIndexMerge (126x)
		57383: 13,  // hintInlHashJoin (126x)
		57384: 14,  // hintInlJoin (126x)
		57385: 15,  // hintInlMergeJoin (126x)
		57351: 16,  // hintJoinFixedOrder (126x)
		57352: 17,  // hintJoinOrder (126x)
		57353: 18,  // hintJoinPrefix (126x)
		57354: 19,  // hintJoinSuffix (126x)
		57405: 20,  // hintLeading (126x)
		57402: 21,  // hintLimitToCop (126x)
		57375: 22,  // hintMaxExecutionTime (126x)
		57386: 23,  // hintMemoryQuota (126x)
		57363: 24,  // hintMerge (126x)
		57367: 25,  // hintMRR (126x)
		57356: 26,  // hintNoBKA (126x)
		57358: 27,  // hintNoBNL (126x)
		57362: 28,  // hintNoHashJoin (126x)
		57369: 29,  // hintNoICP (126x)
		57366: 30,  // hintNoIndexMerge (126x)
		57364: 31,  // hintNoMerge (126x)
		57368: 32,  // hintNoMRR (126x)
		57370: 33,  // hintNoRangeOptimization (126x)
		57374: 34,  // hintNoSemijoin (126x)
		57372: 35,  // hintNoSkipScan (126x)
		57387: 36,  // hintNoSwapJoinInputs (126x)
		57401: 37,  // hintNthPlan (126x)
		57378: 38,  // hintQBName (126x)
		57388: 39,  // hintQueryType (126x)
		57389: 40,  // hintReadConsistentReplica (126x)
		57390: 41,  // hintReadFromStorage (126x)
		57377: 42,  // hintResourceGroup (126x)
		57373: 43,  // hintSemijoin (126x)
		57406: 44,  // hintSemiJoinRewrite (126x)
		57376: 45,  // hintSetVar (126x)
		57371: 46,  // hintSkipScan (126x)
		57391: 47,  // hintSMJoin (126x)
		57404: 48,  // hintStraightJoin (126x)
		57393: 49,  // hintStreamAgg (126x)
		57394: 50,  // hintSwapJoinInputs (126x)
		57399: 51,  // hintTimeRange (126x)
		57400: 52,  // hintUseCascades (126x)
		57396: 53,  // hintUseIndex (126x)
		57395: 54,  // hintUseIndexMerge (126x)
		57397: 55,  // hintUsePlanCache (126x)
		57398: 56,  // hintUseToja (126x)
		44:    57,  // ',' (124x)
		57416: 58,  // hintDupsWeedOut (104x)
		57417: 59,  // hintFirstMatch (104x)
		57418: 60,  // hintLooseScan (104x)
		57419: 61,  // hintMaterialization (104x)
		57411: 62,  // hintTiFlash (104x)
		57410: 63,  // hintTiKV (104x)
		57412: 64,  // hintFalse (103x)
		57407: 65,  // hintOLAP (103x)
		57408: 66,  // hintOLTP (103x)
		57413: 67,  // hintTrue (103x)
		57415: 68,  // hintGB (102x)
		57414: 69,  // hintMB (102x)
		57347: 70,  // hintIdentifier (101x)
		57349: 71,  // hintSingleAtIdentifier (86x)
		93:    72,  // ']' (80x)
		57409: 73,  // hintPartition (74x)
		46:    74,  // '.' (70x)
		61:    75,  // '=' (70x)
		40:    76,  // '(' (65x)
		57344: 77,  // $end (24x)
		57440: 78,  // QueryBlockOpt (17x)
		57432: 79,  // Identifier (13x)
		57346: 80,  // hintIntLit (8x)
		57350: 81,  // hintStringLit (5x)
		57422: 82,  // CommaOpt (4x)
		57428: 83,  // HintTable (4x)
		57429: 84,  // HintTableList (4x)
		91:    85,  // '[' (3x)
		57421: 86,  // BooleanHintName (2x)
		57423: 87,  // HintIndexList (2x)
		57425: 88,  // HintStorageType (2x)
		57426: 89,  // HintStorageTypeAndTable (2x)
		57430: 90,  // HintTableListOpt (2x)
		57435: 91,  // JoinOrderOptimizerHintName (2x)
		57436: 92,  // NullaryHintName (2x)
		57439: 93,  // PartitionListOpt (2x)
		57442: 94,  // StorageOptimizerHintOpt (2x)
		57443: 95,  // SubqueryOptimizerHintName (2x)
		57446: 96,  // SubqueryStrategy (2x)
		57447: 97,  // SupportedIndexLevelOptimizerHintName (2x)
		57448: 98,  // SupportedTableLevelOptimizerHintName (2x)
		57449: 99,  // TableOptimizerHintOpt (2x)
		57451: 100, // UnsupportedIndexLevelOptimizerHintName (2x)
		57452: 101, // UnsupportedTableLevelOptimizerHintName (2x)
		57424: 102, // HintQueryType (1x)
		57427: 103, // HintStorageTypeAndTableList (1x)
		57431: 104, // HintTrueOrFalse (1x)
		57433: 105, // IndexNameList (1x)
		57434: 106, // IndexNameListOpt (1x)
		57437: 107, // OptimizerHintList (1x)
		57438: 108, // PartitionList (1x)
		57441: 109, // Start (1x)
		57444: 110, // SubqueryStrategies (1x)
		57445: 111, // SubqueryStrategiesOpt (1x)
		57450: 112, // UnitOfBytes (1x)
		57453: 113, // Value (1x)
		57420: 114, // $default (0x)
		57345: 115, // error (0x)
		57348: 116, // hintInvalid (0x)
	}

	yyhintSymNames = []string{
		"')'",
		"hintAggToCop",
		"hintBCJoin",
		"hintBKA",
		"hintBNL",
		"hintForceIndex",
		"hintHashAgg",
		"hintHashJoin",
		"hintHashJoinBuild",
		"hintHashJoinProbe",
		"hintIgnoreIndex",
		"hintIgnorePlanCache",
		"hintIndexMerge",
		"hintInlHashJoin",
		"hintInlJoin",
		"hintInlMergeJoin",
		"hintJoinFixedOrder",
		"hintJoinOrder",
		"hintJoinPrefix",
		"hintJoinSuffix",
		"hintLeading",
		"hintLimitToCop",
		"hintMaxExecutionTime",
		"hintMemoryQuota",
		"hintMerge",
		"hintMRR",
		"hintNoBKA",
		"hintNoBNL",
		"hintNoHashJoin",
		"hintNoICP",
		"hintNoIndexMerge",
		"hintNoMerge",
		"hintNoMRR",
		"hintNoRangeOptimization",
		"hintNoSemijoin",
		"hintNoSkipScan",
		"hintNoSwapJoinInputs",
		"hintNthPlan",
		"hintQBName",
		"hintQueryType",
		"hintReadConsistentReplica",
		"hintReadFromStorage",
		"hintResourceGroup",
		"hintSemijoin",
		"hintSemiJoinRewrite",
		"hintSetVar",
		"hintSkipScan",
		"hintSMJoin",
		"hintStraightJoin",
		"hintStreamAgg",
		"hintSwapJoinInputs",
		"hintTimeRange",
		"hintUseCascades",
		"hintUseIndex",
		"hintUseIndexMerge",
		"hintUsePlanCache",
		"hintUseToja",
		"','",
		"hintDupsWeedOut",
		"hintFirstMatch",
		"hintLooseScan",
		"hintMaterialization",
		"hintTiFlash",
		"hintTiKV",
		"hintFalse",
		"hintOLAP",
		"hintOLTP",
		"hintTrue",
		"hintGB",
		"hintMB",
		"hintIdentifier",
		"hintSingleAtIdentifier",
		"']'",
		"hintPartition",
		"'.'",
		"'='",
		"'('",
		"$end",
		"QueryBlockOpt",
		"Identifier",
		"hintIntLit",
		"hintStringLit",
		"CommaOpt",
		"HintTable",
		"HintTableList",
		"'['",
		"BooleanHintName",
		"HintIndexList",
		"HintStorageType",
		"HintStorageTypeAndTable",
		"HintTableListOpt",
		"JoinOrderOptimizerHintName",
		"NullaryHintName",
		"PartitionListOpt",
		"StorageOptimizerHintOpt",
		"SubqueryOptimizerHintName",
		"SubqueryStrategy",
		"SupportedIndexLevelOptimizerHintName",
		"SupportedTableLevelOptimizerHintName",
		"TableOptimizerHintOpt",
		"UnsupportedIndexLevelOptimizerHintName",
		"UnsupportedTableLevelOptimizerHintName",
		"HintQueryType",
		"HintStorageTypeAndTableList",
		"HintTrueOrFalse",
		"IndexNameList",
		"IndexNameListOpt",
		"OptimizerHintList",
		"PartitionList",
		"Start",
		"SubqueryStrategies",
		"SubqueryStrategiesOpt",
		"UnitOfBytes",
		"Value",
		"$default",
		"error",
		"hintInvalid",
	}

	yyhintReductions = []struct{ xsym, components int }{
		{0, 1},
		{109, 1},
		{107, 1},
		{107, 3},
		{107, 1},
		{107, 3},
		{99, 4},
		{99, 4},
		{99, 4},
		{99, 4},
		{99, 4},
		{99, 4},
		{99, 5},
		{99, 5},
		{99, 5},
		{99, 6},
		{99, 4},
		{99, 4},
		{99, 6},
		{99, 6},
		{99, 5},
		{99, 4},
		{99, 5},
		{94, 5},
		{103, 1},
		{103, 3},
		{89, 4},
		{78, 0},
		{78, 1},
		{82, 0},
		{82, 1},
		{93, 0},
		{93, 4},
		{108, 1},
		{108, 3},
		{90, 1},
		{90, 1},
		{84, 2},
		{84, 3},
		{83, 3},
		{83, 5},
		{87, 4},
		{106, 0},
		{106, 1},
		{105, 1},
		{105, 3},
		{111, 0},
		{111, 1},
		{110, 1},
		{110, 3},
		{113, 1},
		{113, 1},
		{113, 1},
		{112, 1},
		{112, 1},
		{104, 1},
		{104, 1},
		{91, 1},
		{91, 1},
		{91, 1},
		{101, 1},
		{101, 1},
		{101, 1},
		{101, 1},
		{101, 1},
		{101, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{98, 1},
		{100, 1},
		{100, 1},
		{100, 1},
		{100, 1},
		{100, 1},
		{100, 1},
		{100, 1},
		{97, 1},
		{97, 1},
		{97, 1},
		{97, 1},
		{95, 1},
		{95, 1},
		{96, 1},
		{96, 1},
		{96, 1},
		{96, 1},
		{86, 1},
		{86, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{92, 1},
		{102, 1},
		{102, 1},
		{88, 1},
		{88, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
		{79, 1},
	}

	yyhintXErrors = map[yyhintXError]string{}

	yyhintParseTab = [263][]uint16{
		// 0
		{1: 242, 213, 206, 208, 234, 240, 220, 221, 222, 232, 246, 224, 216, 214, 219, 185, 203, 204, 205, 223, 243, 192, 197, 215, 225, 207, 209, 210, 227, 244, 211, 226, 228, 236, 230, 218, 193, 196, 201, 245, 202, 195, 235, 248, 194, 229, 212, 247, 241, 217, 198, 238, 231, 233, 239, 237, 86: 199, 91: 186, 200, 94: 184, 191, 97: 190, 188, 183, 189, 187, 107: 182, 109: 181},
		{77: 180},
		{1: 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 340, 77: 179, 82: 440},
		{1: 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 77: 178},
		{1: 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 176, 77: 176},
		// 5
		{76: 437},
		{76: 434},
		{76: 431},
		{76: 426},
		{76: 423},
		// 10
		{76: 412},
		{76: 400},
		{76: 396},
		{76: 392},
		{76: 384},
		// 15
		{76: 381},
		{76: 378},
		{76: 371},
		{76: 366},
		{76: 360},
		// 20
		{76: 357},
		{76: 351},
		{76: 249},
		{76: 123},
		{76: 122},
		// 25
		{76: 121},
		{76: 120},
		{76: 119},
		{76: 118},
		{76: 117},
		// 30
		{76: 116},
		{76: 115},
		{76: 114},
		{76: 113},
		{76: 112},
		// 35
		{76: 111},
		{76: 110},
		{76: 109},
		{76: 108},
		{76: 107},
		// 40
		{76: 106},
		{76: 105},
		{76: 104},
		{76: 103},
		{76: 102},
		// 45
		{76: 101},
		{76: 100},
		{76: 99},
		{76: 98},
		{76: 97},
		// 50
		{76: 96},
		{76: 95},
		{76: 94},
		{76: 93},
		{76: 92},
		// 55
		{76: 91},
		{76: 90},
		{76: 85},
		{76: 84},
		{76: 83},
		// 60
		{76: 82},
		{76: 81},
		{76: 80},
		{76: 79},
		{76: 78},
		// 65
		{76: 77},
		{76: 76},
		{76: 75},
		{76: 74},
		{62: 153, 153, 71: 251, 78: 250},
		// 70
		{62: 256, 255, 88: 254, 253, 103: 252},
		{152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 72: 152, 152, 80: 152},
		{348, 57: 349},
		{156, 57: 156},
		{85: 257},
		// 75
		{85: 71},
		{85: 70},
		{1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 58: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 78: 259, 84: 258},
		{57: 346, 72: 345},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 261, 83: 260},
		// 80
		{143, 57: 143, 72: 143},
		{153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 153, 153, 332, 78: 331},
		{69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69},
		{68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68},
		{67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67},
		// 85
		{66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66},
		{65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65},
		{64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64},
		{63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63},
		{62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62, 62},
		// 90
		{61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61},
		{60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60},
		{59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59, 59},
		{58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58},
		{57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57},
		// 95
		{56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56},
		{55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55},
		{54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54},
		{53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53},
		{52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52, 52},
		// 100
		{51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51},
		{50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50},
		{49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49},
		{48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48},
		{47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47},
		// 105
		{46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 46},
		{45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45},
		{44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44},
		{43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43},
		{42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42},
		// 110
		{41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41},
		{40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40},
		{39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39},
		{38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38},
		{37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37},
		// 115
		{36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36, 36},
		{35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35},
		{34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34, 34},
		{33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33},
		{32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32},
		// 120
		{31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31},
		{30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30},
		{29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29},
		{28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28},
		{27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27},
		// 125
		{26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26},
		{25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25},
		{24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24},
		{23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23},
		{22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22},
		// 130
		{21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21},
		{20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20},
		{19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19},
		{18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18},
		{17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17},
		// 135
		{16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16},
		{15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15},
		{14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14},
		{13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13},
		{12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12},
		// 140
		{11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11},
		{10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10},
		{9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9},
		{8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8},
		{7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7},
		// 145
		{6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6},
		{5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5},
		{4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4},
		{3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3},
		{2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2},
		// 150
		{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1},
		{149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 72: 149, 335, 93: 344},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 333},
		{153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 153, 153, 78: 334},
		{149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 72: 149, 335, 93: 336},
		// 155
		{76: 337},
		{140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 72: 140},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 339, 108: 338},
		{341, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 340, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 82: 342},
		{147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147, 147},
		// 160
		{150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 58: 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 81: 150},
		{148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 72: 148},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 343},
		{146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146},
		{141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 72: 141},
		// 165
		{154, 57: 154},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 261, 83: 347},
		{142, 57: 142, 72: 142},
		{1: 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 77: 157},
		{62: 256, 255, 88: 254, 350},
		// 170
		{155, 57: 155},
		{65: 153, 153, 71: 251, 78: 352},
		{65: 354, 355, 102: 353},
		{356},
		{73},
		// 175
		{72},
		{1: 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 77: 158},
		{153, 71: 251, 78: 358},
		{359},
		{1: 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 77: 159},
		// 180
		{64: 153, 67: 153, 71: 251, 78: 361},
		{64: 364, 67: 363, 104: 362},
		{365},
		{125},
		{124},
		// 185
		{1: 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 77: 160},
		{81: 367},
		{57: 340, 81: 151, 368},
		{81: 369},
		{370},
		// 190
		{1: 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 77: 161},
		{71: 251, 78: 372, 80: 153},
		{80: 373},
		{68: 376, 375, 112: 374},
		{377},
		// 195
		{127},
		{126},
		{1: 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 162, 77: 162},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 379},
		{380},
		// 200
		{1: 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 163, 77: 163},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 382},
		{383},
		{1: 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 77: 164},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 385},
		// 205
		{75: 386},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 389, 390, 388, 113: 387},
		{391},
		{130},
		{129},
		// 210
		{128},
		{1: 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 77: 165},
		{71: 251, 78: 393, 80: 153},
		{80: 394},
		{395},
		// 215
		{1: 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 77: 166},
		{71: 251, 78: 397, 80: 153},
		{80: 398},
		{399},
		{1: 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 77: 167},
		// 220
		{153, 58: 153, 153, 153, 153, 71: 251, 78: 401},
		{134, 58: 405, 406, 407, 408, 96: 404, 110: 403, 402},
		{411},
		{133, 57: 409},
		{132, 57: 132},
		// 225
		{89, 57: 89},
		{88, 57: 88},
		{87, 57: 87},
		{86, 57: 86},
		{58: 405, 406, 407, 408, 96: 410},
		// 230
		{131, 57: 131},
		{1: 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 77: 168},
		{1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 58: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 78: 414, 87: 413},
		{422},
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 261, 83: 415},
		// 235
		{151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 340, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 151, 82: 416},
		{138, 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 419, 105: 418, 417},
		{139},
		{137, 57: 420},
		{136, 57: 136},
		// 240
		{1: 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 421},
		{135, 57: 135},
		{1: 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 77: 169},
		{1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 58: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 78: 414, 87: 424},
		{425},
		// 245
		{1: 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 77: 170},
		{153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 58: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 78: 429, 84: 428, 90: 427},
		{430},
		{145, 57: 346},
		{144, 291, 305, 267, 269, 315, 294, 271, 272, 273, 295, 293, 277, 296, 297, 298, 263, 264, 265, 266, 317, 292, 287, 299, 275, 279, 268, 270, 274, 281, 278, 276, 280, 282, 286, 284, 300, 314, 290, 301, 302, 303, 289, 285, 318, 288, 283, 304, 316, 306, 307, 312, 313, 309, 308, 310, 311, 58: 327, 328, 329, 330, 322, 321, 323, 319, 320, 324, 326, 325, 262, 79: 261, 83: 260},
		// 250
		{1: 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 77: 171},
		{153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 58: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 78: 429, 84: 428, 90: 432},
		{433},
		{1: 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, 77: 172},
		{1: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 58: 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 153, 251, 78: 259, 84: 435},
		// 255
		{436, 57: 346},
		{1: 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 77: 173},
		{153, 71: 251, 78: 438},
		{439},
		{1: 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 77: 174},
		// 260
		{1: 242, 213, 206, 208, 234, 240, 220, 221, 222, 232, 246, 224, 216, 214, 219, 185, 203, 204, 205, 223, 243, 192, 197, 215, 225, 207, 209, 210, 227, 244, 211, 226, 228, 236, 230, 218, 193, 196, 201, 245, 202, 195, 235, 248, 194, 229, 212, 247, 241, 217, 198, 238, 231, 233, 239, 237, 86: 199, 91: 186, 200, 94: 442, 191, 97: 190, 188, 441, 189, 187},
		{1: 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 77: 177},
		{1: 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 77: 175},
	}
)

var yyhintDebug = 0

type yyhintLexer interface {
	Lex(lval *yyhintSymType) int
	Errorf(format string, a ...interface{}) error
	AppendError(err error)
	AppendWarn(err error)
	Errors() (warns []error, errs []error)
}

type yyhintLexerEx interface {
	yyhintLexer
	Reduced(rule, state int, lval *yyhintSymType) bool
}

func yyhintSymName(c int) (s string) {
	x, ok := yyhintXLAT[c]
	if ok {
		return yyhintSymNames[x]
	}

	return __yyfmt__.Sprintf("%d", c)
}

func yyhintlex1(yylex yyhintLexer, lval *yyhintSymType) (n int) {
	n = yylex.Lex(lval)
	if n <= 0 {
		n = yyhintEOFCode
	}
	if yyhintDebug >= 3 {
		__yyfmt__.Printf("\nlex %s(%#x %d), lval: %+v\n", yyhintSymName(n), n, n, lval)
	}
	return n
}

func yyhintParse(yylex yyhintLexer, parser *hintParser) int {
	const yyError = 115

	yyEx, _ := yylex.(yyhintLexerEx)
	var yyn int
	parser.yylval = yyhintSymType{}
	yyS := parser.cache

	Nerrs := 0   /* number of errors */
	Errflag := 0 /* error recovery flag */
	yyerrok := func() {
		if yyhintDebug >= 2 {
			__yyfmt__.Printf("yyerrok()\n")
		}
		Errflag = 0
	}
	_ = yyerrok
	yystate := 0
	yychar := -1
	var yyxchar int
	var yyshift int
	yyp := -1
	goto yystack

ret0:
	return 0

ret1:
	return 1

yystack:
	/* put a state and value onto the stack */
	yyp++
	if yyp+1 >= len(yyS) {
		nyys := make([]yyhintSymType, len(yyS)*2)
		copy(nyys, yyS)
		yyS = nyys
		parser.cache = yyS
	}
	parser.yyVAL = &yyS[yyp+1]
	yyS[yyp].yys = yystate

yynewstate:
	if yychar < 0 {
		yychar = yyhintlex1(yylex, &parser.yylval)
		var ok bool
		if yyxchar, ok = yyhintXLAT[yychar]; !ok {
			yyxchar = len(yyhintSymNames) // > tab width
		}
	}
	if yyhintDebug >= 4 {
		var a []int
		for _, v := range yyS[:yyp+1] {
			a = append(a, v.yys)
		}
		__yyfmt__.Printf("state stack %v\n", a)
	}
	row := yyhintParseTab[yystate]
	yyn = 0
	if yyxchar < len(row) {
		if yyn = int(row[yyxchar]); yyn != 0 {
			yyn += yyhintTabOfs
		}
	}
	switch {
	case yyn > 0: // shift
		yychar = -1
		*parser.yyVAL = parser.yylval
		yystate = yyn
		yyshift = yyn
		if yyhintDebug >= 2 {
			__yyfmt__.Printf("shift, and goto state %d\n", yystate)
		}
		if Errflag > 0 {
			Errflag--
		}
		goto yystack
	case yyn < 0: // reduce
	case yystate == 1: // accept
		if yyhintDebug >= 2 {
			__yyfmt__.Println("accept")
		}
		goto ret0
	}

	if yyn == 0 {
		/* error ... attempt to resume parsing */
		switch Errflag {
		case 0: /* brand new error */
			if yyhintDebug >= 1 {
				__yyfmt__.Printf("no action for %s in state %d\n", yyhintSymName(yychar), yystate)
			}
			msg, ok := yyhintXErrors[yyhintXError{yystate, yyxchar}]
			if !ok {
				msg, ok = yyhintXErrors[yyhintXError{yystate, -1}]
			}
			if !ok && yyshift != 0 {
				msg, ok = yyhintXErrors[yyhintXError{yyshift, yyxchar}]
			}
			if !ok {
				msg, ok = yyhintXErrors[yyhintXError{yyshift, -1}]
			}
			if !ok || msg == "" {
				msg = "syntax error"
			}
			// ignore goyacc error message
			yylex.AppendError(yylex.Errorf(""))
			Nerrs++
			fallthrough

		case 1, 2: /* incompletely recovered error ... try again */
			Errflag = 3

			/* find a state where "error" is a legal shift action */
			for yyp >= 0 {
				row := yyhintParseTab[yyS[yyp].yys]
				if yyError < len(row) {
					yyn = int(row[yyError]) + yyhintTabOfs
					if yyn > 0 { // hit
						if yyhintDebug >= 2 {
							__yyfmt__.Printf("error recovery found error shift in state %d\n", yyS[yyp].yys)
						}
						yystate = yyn /* simulate a shift of "error" */
						goto yystack
					}
				}

				/* the current p has no shift on "error", pop stack */
				if yyhintDebug >= 2 {
					__yyfmt__.Printf("error recovery pops state %d\n", yyS[yyp].yys)
				}
				yyp--
			}
			/* there is no state on the stack with an error shift ... abort */
			if yyhintDebug >= 2 {
				__yyfmt__.Printf("error recovery failed\n")
			}
			goto ret1

		case 3: /* no shift yet; clobber input char */
			if yyhintDebug >= 2 {
				__yyfmt__.Printf("error recovery discards %s\n", yyhintSymName(yychar))
			}
			if yychar == yyhintEOFCode {
				goto ret1
			}

			yychar = -1
			goto yynewstate /* try again in the same state */
		}
	}

	r := -yyn
	x0 := yyhintReductions[r]
	x, n := x0.xsym, x0.components
	yypt := yyp
	_ = yypt // guard against "declared and not used"

	yyp -= n
	if yyp+1 >= len(yyS) {
		nyys := make([]yyhintSymType, len(yyS)*2)
		copy(nyys, yyS)
		yyS = nyys
		parser.cache = yyS
	}
	parser.yyVAL = &yyS[yyp+1]

	/* consult goto table to find next state */
	exState := yystate
	yystate = int(yyhintParseTab[yyS[yyp].yys][x]) + yyhintTabOfs
	/* reduction by production r */
	if yyhintDebug >= 2 {
		__yyfmt__.Printf("reduce using rule %v (%s), and goto state %d\n", r, yyhintSymNames[x], yystate)
	}

	switch r {
	case 1:
		{
			parser.result = yyS[yypt-0].hints
		}
	case 2:
		{
			if yyS[yypt-0].hint != nil {
				parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint}
			}
		}
	case 3:
		{
			if yyS[yypt-0].hint != nil {
				parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint)
			} else {
				parser.yyVAL.hints = yyS[yypt-2].hints
			}
		}
	case 4:
		{
			parser.yyVAL.hints = yyS[yypt-0].hints
		}
	case 5:
		{
			parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hints...)
		}
	case 6:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 7:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 8:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 9:
		{
			h := yyS[yypt-1].hint
			h.HintName = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 10:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 11:
		{
			h := yyS[yypt-1].hint
			h.HintName = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 12:
		{
			parser.warnUnsupportedHint(yyS[yypt-4].ident)
			parser.yyVAL.hint = nil
		}
	case 13:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-4].ident),
				QBName:   model.NewCIStr(yyS[yypt-2].ident),
				HintData: yyS[yypt-1].number,
			}
		}
	case 14:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-4].ident),
				QBName:   model.NewCIStr(yyS[yypt-2].ident),
				HintData: int64(yyS[yypt-1].number),
			}
		}
	case 15:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-5].ident),
				HintData: ast.HintSetVar{
					VarName: yyS[yypt-3].ident,
					Value:   yyS[yypt-1].ident,
				},
			}
		}
	case 16:
		{
			parser.warnUnsupportedHint(yyS[yypt-3].ident)
			parser.yyVAL.hint = nil
		}
	case 17:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-3].ident),
				QBName:   model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 18:
		{
			maxValue := uint64(math.MaxInt64) / yyS[yypt-1].number
			if yyS[yypt-2].number <= maxValue {
				parser.yyVAL.hint = &ast.TableOptimizerHint{
					HintName: model.NewCIStr(yyS[yypt-5].ident),
					HintData: int64(yyS[yypt-2].number * yyS[yypt-1].number),
					QBName:   model.NewCIStr(yyS[yypt-3].ident),
				}
			} else {
				yylex.AppendError(ErrWarnMemoryQuotaOverflow.GenWithStackByArgs(math.MaxInt64))
				parser.lastErrorAsWarn()
				parser.yyVAL.hint = nil
			}
		}
	case 19:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-5].ident),
				HintData: ast.HintTimeRange{
					From: yyS[yypt-3].ident,
					To:   yyS[yypt-1].ident,
				},
			}
		}
	case 20:
		{
			h := yyS[yypt-1].hint
			h.HintName = model.NewCIStr(yyS[yypt-4].ident)
			h.QBName = model.NewCIStr(yyS[yypt-2].ident)
			parser.yyVAL.hint = h
		}
	case 21:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-3].ident),
				QBName:   model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 22:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				HintName: model.NewCIStr(yyS[yypt-4].ident),
				QBName:   model.NewCIStr(yyS[yypt-2].ident),
				HintData: model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 23:
		{
			hs := yyS[yypt-1].hints
			name := model.NewCIStr(yyS[yypt-4].ident)
			qb := model.NewCIStr(yyS[yypt-2].ident)
			for _, h := range hs {
				h.HintName = name
				h.QBName = qb
			}
			parser.yyVAL.hints = hs
		}
	case 24:
		{
			parser.yyVAL.hints = []*ast.TableOptimizerHint{yyS[yypt-0].hint}
		}
	case 25:
		{
			parser.yyVAL.hints = append(yyS[yypt-2].hints, yyS[yypt-0].hint)
		}
	case 26:
		{
			h := yyS[yypt-1].hint
			h.HintData = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 27:
		{
			parser.yyVAL.ident = ""
		}
	case 31:
		{
			parser.yyVAL.modelIdents = nil
		}
	case 32:
		{
			parser.yyVAL.modelIdents = yyS[yypt-1].modelIdents
		}
	case 33:
		{
			parser.yyVAL.modelIdents = []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)}
		}
	case 34:
		{
			parser.yyVAL.modelIdents = append(yyS[yypt-2].modelIdents, model.NewCIStr(yyS[yypt-0].ident))
		}
	case 36:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				QBName: model.NewCIStr(yyS[yypt-0].ident),
			}
		}
	case 37:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				Tables: []ast.HintTable{yyS[yypt-0].table},
				QBName: model.NewCIStr(yyS[yypt-1].ident),
			}
		}
	case 38:
		{
			h := yyS[yypt-2].hint
			h.Tables = append(h.Tables, yyS[yypt-0].table)
			parser.yyVAL.hint = h
		}
	case 39:
		{
			parser.yyVAL.table = ast.HintTable{
				TableName:     model.NewCIStr(yyS[yypt-2].ident),
				QBName:        model.NewCIStr(yyS[yypt-1].ident),
				PartitionList: yyS[yypt-0].modelIdents,
			}
		}
	case 40:
		{
			parser.yyVAL.table = ast.HintTable{
				DBName:        model.NewCIStr(yyS[yypt-4].ident),
				TableName:     model.NewCIStr(yyS[yypt-2].ident),
				QBName:        model.NewCIStr(yyS[yypt-1].ident),
				PartitionList: yyS[yypt-0].modelIdents,
			}
		}
	case 41:
		{
			h := yyS[yypt-0].hint
			h.Tables = []ast.HintTable{yyS[yypt-2].table}
			h.QBName = model.NewCIStr(yyS[yypt-3].ident)
			parser.yyVAL.hint = h
		}
	case 42:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{}
		}
	case 44:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{
				Indexes: []model.CIStr{model.NewCIStr(yyS[yypt-0].ident)},
			}
		}
	case 45:
		{
			h := yyS[yypt-2].hint
			h.Indexes = append(h.Indexes, model.NewCIStr(yyS[yypt-0].ident))
			parser.yyVAL.hint = h
		}
	case 52:
		{
			parser.yyVAL.ident = strconv.FormatUint(yyS[yypt-0].number, 10)
		}
	case 53:
		{
			parser.yyVAL.number = 1024 * 1024
		}
	case 54:
		{
			parser.yyVAL.number = 1024 * 1024 * 1024
		}
	case 55:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: true}
		}
	case 56:
		{
			parser.yyVAL.hint = &ast.TableOptimizerHint{HintData: false}
		}

	}

	if !parser.lexer.skipPositionRecording {
		yyhintSetOffset(parser.yyVAL, parser.yyVAL.offset)
	}

	if yyEx != nil && yyEx.Reduced(r, exState, parser.yyVAL) {
		return -1
	}
	goto yystack /* stack new state and value */
}

相关信息

tidb 源码目录

相关文章

tidb digester 源码

tidb hintparserimpl 源码

tidb lexer 源码

tidb misc 源码

tidb yy_parser 源码

0  赞