solc-0.8.36-doubleshift20 0x000000000004444c5dc75cb358380d2e3de08a90 optimized
19621 bytes
6080604052600436106101e5575f3560e01c80635a6bcfda11610108578063a58411941161009d578063f135baaa1161006d578063f135baaa14610602578063f2fde38b14610621578063f3cd914c14610640578063f5298aca1461065f578063fe99049a1461067e575f5ffd5b8063a58411941461056c578063b6363cf21461058b578063dbd035ff146105c4578063f02de3b2146105e3575f5ffd5b80638161b874116100d85780638161b874146104cd5780638da5cb5b146104ec57806397e8cd4e146105225780639bf6645f1461054d575f5ffd5b80635a6bcfda146104295780636276cbbe1461045d5780637e87ce7d1461048f57806380f0b44c146104ae575f5ffd5b80632d7713891161017e57806348c894911161014e57806348c894911461038357806352759651146103af578063558a7297146103ce578063598af9e7146103ed575f5ffd5b80632d7713891461030657806335fd631a146103255780633dd45adb14610351578063426a849314610364575f5ffd5b806311da60b4116101b957806311da60b4146102a1578063156e29f6146102a95780631e2eaeaf146102c8578063234266d7146102e7575f5ffd5b8062fdd58e146101e957806301ffc9a714610232578063095bcdb6146102615780630b0d9c0914610280575b5f5ffd5b3480156101f4575f5ffd5b5061021f61020336600461411f565b600460209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b34801561023d575f5ffd5b5061025161024c366004614149565b61069d565b6040519015158152602001610229565b34801561026c575f5ffd5b5061025161027b366004614170565b6106d3565b34801561028b575f5ffd5b5061029f61029a3660046141a2565b61077a565b005b61021f6107cb565b3480156102b4575f5ffd5b5061029f6102c3366004614170565b6107fd565b3480156102d3575f5ffd5b5061021f6102e23660046141e0565b610848565b3480156102f2575f5ffd5b5061021f61030136600461435f565b610852565b348015610311575f5ffd5b5061029f6103203660046143c3565b610930565b348015610330575f5ffd5b5061034461033f3660046143de565b6109c6565b60405161022991906143fe565b61021f61035f3660046143c3565b610a03565b34801561036f575f5ffd5b5061025161037e366004614170565b610a35565b34801561038e575f5ffd5b506103a261039d366004614440565b610a99565b604051610229919061447e565b3480156103ba575f5ffd5b5061029f6103c93660046144b3565b610b5c565b3480156103d9575f5ffd5b506102516103e83660046144f4565b610bc2565b3480156103f8575f5ffd5b5061021f6104073660046141a2565b600560209081525f938452604080852082529284528284209052825290205481565b348015610434575f5ffd5b5061044861044336600461451e565b610c31565b60408051928352602083019190915201610229565b348015610468575f5ffd5b5061047c6104773660046145c0565b610dc5565b60405160029190910b8152602001610229565b34801561049a575f5ffd5b5061029f6104a93660046144b3565b610f92565b3480156104b9575f5ffd5b5061029f6104c836600461411f565b611044565b3480156104d8575f5ffd5b5061021f6104e73660046141a2565b6110b1565b3480156104f7575f5ffd5b505f5461050a906001600160a01b031681565b6040516001600160a01b039091168152602001610229565b34801561052d575f5ffd5b5061021f61053c3660046143c3565b60016020525f908152604090205481565b348015610558575f5ffd5b506103446105673660046145f6565b611186565b348015610577575f5ffd5b5061029f6105863660046143c3565b6111bf565b348015610596575f5ffd5b506102516105a5366004614665565b600360209081525f928352604080842090915290825290205460ff1681565b3480156105cf575f5ffd5b506103446105de3660046145f6565b6111fb565b3480156105ee575f5ffd5b5060025461050a906001600160a01b031681565b34801561060d575f5ffd5b5061021f61061c3660046141e0565b611232565b34801561062c575f5ffd5b5061029f61063b3660046143c3565b61123c565b34801561064b575f5ffd5b5061021f61065a366004614691565b6112ce565b34801561066a575f5ffd5b5061029f610679366004614170565b611411565b348015610689575f5ffd5b5061025161069836600461472f565b61145c565b5f6301ffc9a760e01b6001600160e01b0319831614806106cd5750630f632fb360e01b6001600160e01b03198316145b92915050565b335f9081526004602090815260408083208584529091528120805483919083906106fe908490614786565b90915550506001600160a01b0384165f90815260046020908152604080832086845290915281208054849290610735908490614799565b909155505060408051338082526020820185905285926001600160a01b038816925f516020614c455f395f51905f5291015b60405180910390a45060015b9392505050565b5f516020614c655f395f51905f525c61079d5761079d6354e3ca0d60e01b6115bb565b6107b2836107aa836115c3565b5f03336115e3565b6107c66001600160a01b0384168383611636565b505050565b5f5f516020614c655f395f51905f525c6107ef576107ef6354e3ca0d60e01b6115bb565b6107f8336116d5565b905090565b5f516020614c655f395f51905f525c610820576108206354e3ca0d60e01b6115bb565b8161082e816107aa846115c3565b610842846001600160a01b03831684611778565b50505050565b5f81545f5260205ff35b5f5f516020614c655f395f51905f525c610876576108766354e3ca0d60e01b6115bb565b61087e6117ea565b60a086205f8181526006602052604090206108988161182c565b60808801516108b4906001600160a01b0316898989898961184d565b6108bf8188886118ca565b92506108cc88843361196d565b6040805188815260208101889052339184917f29ef05caaff9404b7cb6d1c0e9bbae9eaa7ab2541feba1a9c4248594c08156cb910160405180910390a36080880151610925906001600160a01b03168989898989611995565b505095945050505050565b5f546001600160a01b0316331461097d5760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b60448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040517fb4bd8ef53df690b9943d3318996006dbb82a25f54719d8c8035b516a2a5b8acc905f90a250565b6060604051808360051b6020835284602084015260408301925080830190505b855483526020830192506001860195508083106109e65781810382f35b5f5f516020614c655f395f51905f525c610a2757610a276354e3ca0d60e01b6115bb565b6106cd826116d5565b919050565b335f8181526005602090815260408083206001600160a01b03881680855290835281842087855290925280832085905551919285927fb3fd5071835887567a0671151121894ddccc2842f1d10bedad13e0d17cace9a7906107679087815260200190565b60605f516020614c655f395f51905f525c15610abf57610abf6328486b6360e11b6115bb565b610ac7611a07565b6040516348eeb9a360e11b815233906391dd734690610aec90869086906004016147d4565b5f604051808303815f875af1158015610b07573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b2e91908101906147e7565b90505f516020614c855f395f51905f525c15610b5457610b54635212cba160e01b6115bb565b6106cd611a1a565b604082015162ffffff1662800000141580610b84575060808201516001600160a01b03163314155b15610b9957610b996330d2164160e01b6115bb565b610ba78162ffffff16611a2c565b60a082205f8181526006602052604090206107c69083611a52565b335f8181526003602090815260408083206001600160a01b038716808552908352818420805460ff191687151590811790915591519182529293917fceb576d9f15e4e200fdb5096d64d5dfd667e16def20c1eefd14256d8e3faa267910160405180910390a350600192915050565b5f805f516020614c655f395f51905f525c610c5657610c566354e3ca0d60e01b6115bb565b610c5e6117ea565b60a086205f818152600660205260409020610c788161182c565b6080880151610c93906001600160a01b031689898989611a6d565b5f610cf76040518060c001604052803360601b60601c81526020018a5f015160020b81526020018a6020015160020b8152602001610cd48b60400151611b6f565b600f0b81526060808d015160020b60208301528b01516040909101528390611b8b565b94509050610d058185611ef8565b885160208a01516040808c015160608d015191519499503396508795507ff208f4912782fd25c7f114ca3723a2d5dd6f3bcc3ac8db5af63baa85f711d5ec94610d6e94939290600294850b81529290930b60208301526040820152606081019190915260800190565b60405180910390a360808701515f90610d95906001600160a01b0316898987878b8b611f2b565b90945090508015610daf57610daf88828a6080015161196d565b610dba88853361196d565b505094509492505050565b5f610dce6117ea565b6060830151617fff60029190910b1315610df9576060830151610df9906316e0049f60e31b90612050565b600160020b836060015160020b1215610e23576060830151610e2390631d3d20b160e31b90612050565b825160208401516001600160a01b03908116911610610e555782516020840151610e55916306e6c98360e41b9161205f565b60408301516080840151610e74916001600160a01b0390911690612088565b610e8f576080830151610e8f90630732d7b560e51b90612149565b5f610ea2846040015162ffffff1661215e565b6080850151909150610ebe906001600160a01b03168585612183565b60a084205f818152600660205260409020610eda9085846121f0565b9250846020015160601b60601c855f015160601b60601c827fdd466e674ea557f56295e2d0218a125ea4b4f0f6f3307b95f85e6110838d6438886040015189606001518a608001518a8a604051610f6895949392919062ffffff959095168552600293840b60208601526001600160a01b03928316604086015291166060840152900b608082015260a00190565b60405180910390a46080850151610f8a906001600160a01b0316868686612244565b505092915050565b6002546001600160a01b03163314610fb457610fb46348f5c3ed60e01b6115bb565b6103e9610fff821610623e900062fff00083161016610fe357610fe363a7abe2f760e01b62ffffff8316612149565b60a0822061100582610fff835f90815260066020526040902090565b906122b3565b60405162ffffff8316815281907fe9c42593e71f84403b84352cd168d693e2c9fcd1fdbcc3feb21d92b43e6696f99060200160405180910390a2505050565b5f516020614c655f395f51905f525c611067576110676354e3ca0d60e01b6115bb565b335f9081526001600160a01b038316602052604081205c90611088836115c3565b90508181600f0b146110a4576110a463bda73abf60e01b6115bb565b61084284825f03336115e3565b6002545f906001600160a01b031633146110d5576110d56348f5c3ed60e01b6115bb565b6001600160a01b0383161515801561110657506001600160a01b035f516020614c255f395f51905f525c8116908416145b1561111b5761111b6318f3cb2960e31b6115bb565b81156111275781611140565b6001600160a01b0383165f908152600160205260409020545b6001600160a01b0384165f9081526001602052604081208054929350839290919061116c908490614786565b9091555061077390506001600160a01b0384168583611636565b606060405180602082528360208301526040820191508360051b8201855b80355c8452602093840193018184106111a4575b5081810382f35b6001600160a01b0381166111d8576111d56122da565b50565b5f6111eb6001600160a01b0383166122ec565b90506111f78282612368565b5050565b606060405180602082528360208301526040820191508360051b8201855b803554845260209384019301818410156111b857611219565b5f815c5f5260205ff35b5f546001600160a01b031633146112845760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610974565b5f80546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b5f5f516020614c655f395f51905f525c6112f2576112f26354e3ca0d60e01b6115bb565b6112fa6117ea565b83602001515f036113155761131563be8b850760e01b6115bb565b60a085205f81815260066020526040902061132f8161182c565b60808701515f9081908190611350906001600160a01b03168b8b8b8b6123a8565b8093508195508294505050506113bc84866040518060a001604052808681526020018e6060015160020b81526020018d5f0151151581526020018d6040015160601b60601c81526020018562ffffff168152508c5f01516113b5578d602001516124c4565b8d516124c4565b60808b01519096505f92506113e091506001600160a01b03168a8a888b8b886125a2565b909550905080156113fa576113fa89828b6080015161196d565b61140589863361196d565b50505050949350505050565b5f516020614c655f395f51905f525c611434576114346354e3ca0d60e01b6115bb565b8161144881611442846115c3565b336115e3565b610842846001600160a01b038316846126c3565b5f336001600160a01b0386161480159061149957506001600160a01b0385165f90815260036020908152604080832033845290915290205460ff16155b15611509576001600160a01b0385165f90815260056020908152604080832033845282528083208684529091529020545f198114611507576114db8382614786565b6001600160a01b0387165f90815260056020908152604080832033845282528083208884529091529020555b505b6001600160a01b0385165f9081526004602090815260408083208684529091528120805484929061153b908490614786565b90915550506001600160a01b0384165f90815260046020908152604080832086845290915281208054849290611572908490614799565b9091555050604080513381526020810184905284916001600160a01b0387811692908916915f516020614c455f395f51905f52910160405180910390a45060015b949350505050565b805f5260045ffd5b5f6001607f1b82106115df576115df6393dafdf160e01b6115bb565b5090565b81600f0b5f036115f257505050565b5f806116086001600160a01b0386168486612781565b91509150805f036116205761161b6127ba565b61162f565b815f0361162f5761162f6127e2565b5050505050565b5f6001600160a01b03841661166b575f5f5f5f85875af190508061166657611666835f633d2cec6f60e21b61280a565b610842565b60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f511416171691505f81525f60208201525f60408201525080610842576108428463a9059cbb60e01b633c9fd93960e21b61280a565b5f5f516020614c255f395f51905f525c6001600160a01b0381166116fb5734915061175f565b341561171157611711635876424f60e11b6115bb565b7f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955c5f6117466001600160a01b0384166122ec565b90506117528282614786565b935061175c6122da565b50505b6117728161176c846115c3565b856115e3565b50919050565b6001600160a01b0383165f908152600460209081526040808320858452909152812080548392906117aa908490614799565b9091555050604080513381526020810183905283916001600160a01b038616915f915f516020614c455f395f51905f5291015b60405180910390a4505050565b306001600160a01b037f000000000000000000000000000000000004444c5dc75cb358380d2e3de08a90161461182a5761182a6306c4a1c760e11b6115bb565b565b80546001600160a01b03165f036111d5576111d563486aa30760e01b6115bb565b85336001600160a01b038216146118c15760208716156118c1576118bf338787878787604051602401611885969594939291906148bc565b60408051601f198184030181529190526020810180516001600160e01b0316635b54587d60e11b1790526001600160a01b03891690612882565b505b50505050505050565b60038301545f906001600160801b03168082036118f1576118f163a74f97ab60e01b6115bb565b61191f6118fd856115c3565b5f03611908856115c3565b5f0360809190911b6001600160801b039091161790565b91508315611943576001850180546001600160801b038316600160801b8702040190555b8215611965576002850180546001600160801b038316600160801b8602040190555b509392505050565b82516119839061197d8460801d90565b836115e3565b6107c6836020015161197d84600f0b90565b85336001600160a01b038216146118c15760108716156118c1576118bf3387878787876040516024016119cd969594939291906148bc565b60408051601f198184030181529190526020810180516001600160e01b031663e1b4af6960e01b1790526001600160a01b03891690612882565b60015f516020614c655f395f51905f525d565b5f5f516020614c655f395f51905f525d565b620f424062ffffff821611156111d5576111d5631400211360e01b62ffffff8316612149565b611a5b8261182c565b8154611a67908261291c565b90915550565b84336001600160a01b03821614611b67575f8460400151138015611a945750610800861615155b15611af557611aef3386868686604051602401611ab5959493929190614906565b60408051601f198184030181529190526020810180516001600160e01b031663259982e560e01b1790526001600160a01b03881690612882565b50611b67565b5f846040015113158015611b0c5750610200861615155b15611b67576118c13386868686604051602401611b2d959493929190614906565b60408051601f198184030181529190526020810180516001600160e01b031663021d0ee760e41b1790526001600160a01b03881690612882565b505050505050565b80600f81900b8114610a3057610a306393dafdf160e01b6115bb565b6060810151602082015160408301515f9283929091611baa8282612937565b604080516080810182525f80825260208201819052918101829052606081019190915283600f0b5f14611ce257611be38884865f612997565b6001600160801b0316602083015215158152611c028883866001612997565b6001600160801b03166060830152151560408201525f600f85900b12611ca75760808701515f9060020b620d89e71981810783139082900503620d89e891909105036001016001600160801b030460208301519091506001600160801b0380831691161115611c7c57611c7c63b8e3c38560e01b85612050565b60608201516001600160801b0380831691161115611ca557611ca563b8e3c38560e01b84612050565b505b805115611cc3576080870151611cc39060058a01908590612a58565b806040015115611ce2576080870151611ce29060058a01908490612a58565b5f5f611cef8a8686612aaa565b8a5160a08c015160408051602681019290925260068083018a9052600383018b9052928252603a600c8301205f838301819052602080850182905293819052908152928f01909152812092945090925080611d4c838a8787612b5e565b91509150611d78611d5c836115c3565b611d65836115c3565b6001600160801b031660809190911b1790565b995050505050505f84600f0b1215611de157805115611db457600283810b5f90815260048a016020526040812081815560018101829055909101555b806040015115611de157600282810b5f90815260048a016020526040812081815560018101829055909101555b5082600f0b5f14611eee5786545f80611dfd8360a01c60020b90565b6001600160a01b038416915091508460020b8260020b1215611e4c57611e45611e3f611e3a611e2b88612c15565b611e3488612c15565b8a612ecd565b611b6f565b60801b90565b9750611eea565b8360020b8260020b1215611ec557611e83611e6d611e3a83611e3488612c15565b611d65611e3a611e7c89612c15565b858b612f05565b60038b0154909850611e9e906001600160801b031687612f31565b60038b0180546001600160801b0319166001600160801b0392909216919091179055611eea565b611ee75f611d65611e3a611ed889612c15565b611ee189612c15565b8b612f05565b97505b5050505b5050509250929050565b5f608082811d9084901d01600f83810b9085900b01611f22611f1983611b6f565b611d6583611b6f565b95945050505050565b5f806001600160a01b0389163303611f4757508490505f612044565b8591505f87604001511315611fd657610400891615611fd157611fc233898989898989604051602401611f809796959493929190614966565b60408051601f198184030181529190526020810180516001600160e01b03166327c18fbf60e21b17905260028b1615155b6001600160a01b038c169190612f58565b9050611fce8282612f99565b91505b612044565b61010089161561204457612035338989898989896040516024016120009796959493929190614966565b60408051601f198184030181529190526020810180516001600160e01b0316633615df3f60e11b17905260018b161515611fb1565b90506120418282612f99565b91505b97509795505050505050565b815f528060020b60045260245ffd5b6040518381526001600160a01b03831660048201526001600160a01b0382166024820152604481fd5b5f6080831615801561209c57506008831615155b156120a857505f6106cd565b604083161580156120bb57506004831615155b156120c757505f6106cd565b61040083161580156120db57506002831615155b156120e757505f6106cd565b61010083161580156120fb57506001831615155b1561210757505f6106cd565b6001600160a01b0383161561213857613fff831615158061213357506280000062ffffff831614610773565b610773565b5062ffffff16628000001415919050565b815f526001600160a01b03811660045260245ffd5b5f6280000062ffffff83160361217557505f919050565b6115df8262ffffff16611a2c565b82336001600160a01b03821614610842576120008416156108425761162f3384846040516024016121b6939291906149d4565b60408051601f198184030181529190526020810180516001600160e01b0316636e4c1aa760e11b1790526001600160a01b03861690612882565b82545f906001600160a01b03161561221257612212637983c05160e01b6115bb565b61221b83612fba565b905061223a826122346001600160a01b0386168461324a565b9061291c565b9093555090919050565b83336001600160a01b0382161461162f5761100085161561162f57611b67338585856040516024016122799493929190614a0a565b60408051601f198184030181529190526020810180516001600160e01b0316636fe7e6eb60e01b1790526001600160a01b03871690612882565b6122bc8261182c565b815462ffffff60b81b191662ffffff60b81b60b883901b1617611a67565b5f5f516020614c255f395f51905f525d565b5f6001600160a01b038216612302575047919050565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612344573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106cd9190614a4b565b6001600160a01b0382165f516020614c255f395f51905f525d807f1e0745a7db1623981f0b2a5d4232364c00787266eb75ad546f190e6cebe9bd955d5050565b60208301515f806001600160a01b03881633036123c7575f91506124b9565b60808816156124b9575f61241d89338a8a8a8a6040516024016123ee959493929190614a62565b60408051601f198184030181529190526020810180516001600160e01b03166315d7892d60e21b179052612882565b9050805160601461243857612438631e048e1d60e01b6115bb565b604088015162ffffff16628000000361245357606081015191505b60088916156124b757604081015192505f61246e8460801d90565b905080600f0b5f146124b5575f851261248b600f83900b87614abb565b95508061249a575f861261249e565b5f86135b156124b3576124b3637d05b8eb60e11b6115bb565b505b505b505b955095509592505050565b5f808080806124d38988613265565b93509350935093505f831115612501576001600160a01b0386165f9081526001602052604090208054840190555b33887f40e9cecb9f5f1f1c5b9c97dec2917b7ee92e57ba5563708daca94dd84ad7112f61252e8760801d90565b61253888600f0b90565b85516040808801516020808a01518351600f97880b81529590960b908501526001600160a01b03909216908301526001600160801b0316606082015260029190910b608082015262ffffff861660a082015260c00160405180910390a35091979650505050505050565b5f806001600160a01b03891633036125be57508490505f612044565b5f6125c98460801d90565b90505f6125d685600f0b90565b905060408b161561265057612643611e3a338c8c8c8c8c60405160240161260296959493929190614ada565b60408051601f198184030181529190526020810180516001600160e01b031663b47b2fb160e01b17905260048e1615156001600160a01b038f169190612f58565b61264d9082614b3a565b90505b5f81600f0b5f141580612666575082600f0b5f14155b156126b157895160208b01515f1390151514612691576001600160801b038316608083901b176126a2565b6001600160801b038216608084901b175b90506126ae8982612f99565b98505b979b979a509698505050505050505050565b336001600160a01b038416811480159061270257506001600160a01b038085165f9081526003602090815260408083209385168352929052205460ff16155b15612776576001600160a01b038085165f9081526005602090815260408083209385168352928152828220868352905220545f198114612774576127468382614786565b6001600160a01b038087165f9081526005602090815260408083209387168352928152828220888352905220555b505b61084284848461389b565b6001600160a01b038281165f90815290841660205260408120805c91906127ac600f85900b84614abb565b915081815d50935093915050565b5f516020614c855f395f51905f525c600181039050805f516020614c855f395f51905f525d50565b5f516020614c855f395f51905f525c600181019050805f516020614c855f395f51905f525d50565b6040516390bfb86560e01b8082526001600160a01b03851660048301526001600160e01b031984166024830152608060448301526020601f3d018190040260a0810160648401523d608484015290913d5f60a483013e60048260a4018201526001600160e01b031984168260c4018201528160e40181fd5b60605f5f5f8451602086015f885af19050806128b2576128b2846128a585614b67565b63a9e35b2f60e01b61280a565b6040519150601f19603f3d011682016040523d82523d5f602084013e602082511080612900575060208301516001600160e01b0319166128f3836020015190565b6001600160e01b03191614155b1561291557612915631e048e1d60e01b6115bb565b5092915050565b60d01b62ffffff60d01b1662ffffff60d01b19919091161790565b8060020b8260020b126129565761295663c4433ed560e01b8383613904565b620d89e719600283900b12156129775761297763d5e2f7ab60e01b83612050565b620d89e8600282900b13156111f7576111f763035aeeff60e31b82612050565b600283900b5f908152600485016020526040812080548291906001600160801b03811690600160801b9004600f0b6129cf8288612f31565b6001600160801b03808216159084168015919091141596509094505f03612a1957885460a01c60020b60020b8860020b13612a19576001808a0154908401556002808a0154908401555b5f86612a2e57612a298883614b3a565b612a38565b612a388883614ba5565b90508060801b6001600160801b0386161784555050505094509492505050565b600291820b910b80820715612a855760405163d4d8f3e681528260208201528160408201526044601c8201fd5b80820591508160081d5f528260205260405f20600160ff84161b815418815550505050565b600282810b5f81815260048601602052604080822085850b83529082208754929485949293919260a09290921c900b90811215612b00578160010154836001015403945081600201548360020154039350612b53565b8560020b8160020b12612b2c578260010154826001015403945082600201548260020154039350612b53565b81600101548360010154896001015403039450816002015483600201548960020154030393505b505050935093915050565b83545f9081906001600160801b0316600f86900b8203612b9d576001600160801b0381165f03612b9857612b98632bbfae4960e21b6115bb565b612bc3565b612ba78187612f31565b87546001600160801b0319166001600160801b03919091161787555b6001870154612be29086036001600160801b038316600160801b613921565b9250612bff876002015485038260801b60801c600160801b613921565b6001880195909555505060029094015591929050565b60020b5f60ff82901d80830118620d89e8811115612c3e57612c3e6345c3193d60e11b84612050565b7001fffcb933bd6fad37aa2d162d1a5940016001821602600160801b186002821615612c7a576ffff97272373d413259a46990580e213a0260801c5b6004821615612c99576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612cb8576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612cd7576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612cf6576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612d15576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612d34576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612d54576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612d74576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612d94576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612db4576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612dd4576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612df4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612e14576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612e34576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612e55576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612e75576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612e94576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612eb1576b048a170391f7dc42444e8fa20260801c5b5f841315612ebd575f19045b63ffffffff0160201c9392505050565b5f5f82600f0b12612ef457612eed612ee885858560016139bd565b613a74565b5f036115b3565b6115b3612ee88585855f035f6139bd565b5f5f82600f0b12612f2057612eed612ee88585856001613a8d565b6115b3612ee88585855f035f613a8d565b6001600160801b038216600f82900b01608081901c156106cd576393dafdf15f526004601cfd5b5f5f612f648585612882565b905082612f74575f915050610773565b8051604014612f8d57612f8d631e048e1d60e01b6115bb565b60400151949350505050565b5f608082811d9084901d03600f83810b9085900b03611f22611f1983611b6f565b5f73fffd8963efd1fc6a506488495d951d51639616826001600160a01b036401000276a2198401161115612ff957612ff96318521d4960e21b83612149565b640100000000600160c01b03602083901b16805f61301682613ad9565b60ff1690506080811061303157607f810383901c915061303b565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c678000000000000000161760c19b909b1c674000000000000000169a909a1760c29990991c672000000000000000169890981760c39790971c671000000000000000169690961760c49590951c670800000000000000169490941760c59390931c670400000000000000169290921760c69190911c670200000000000000161760c79190911c670100000000000000161760c89190911c6680000000000000161760c99190911c6640000000000000161760ca9190911c6620000000000000161760cb9190911c6610000000000000161760cc9190911c6608000000000000161760cd9190911c66040000000000001617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461323b576001600160a01b03891661322082612c15565b6001600160a01b03161115613235578161323d565b8061323d565b815b9998505050505050505050565b60a01b62ffffff60a01b1662ffffff60a01b19919091161790565b604080516060810182525f8082526020820181905291810182905281908190855460408601515f8161329f57610fff60c484901c166132a9565b610fff60b884901c165b88516001600160a01b038516865261ffff9190911691505f60a085901c60020b60020b602087015260038b01546001600160801b0316604087015260808a01515f9062400000166133035760d086901c62ffffff16613315565b6133158b6080015162ffffff16613b63565b9050831561333b57620f4240610fff851662ffffff83168181029290920491010361333d565b805b975050620f42408762ffffff16106133685789515f121561336857613368634b10312360e11b6115bb565b89515f03613380575f5f985098505050505050613892565b83156133f65760608a01516001600160a01b038681169116106133bf576133bf6001600160a01b0386165b60608c0151637c9c6e8f60e01b919061205f565b60608a01516401000276a36001600160a01b03909116116133f15760608a01516133f190639e4d7cc760e01b90612149565b613460565b60608a01516001600160a01b0386811691161161341f5761341f6001600160a01b0386166133ab565b60608a015173fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03909116106134605760608a015161346090639e4d7cc760e01b90612149565b60408051610100810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152846134af578b600201546134b5565b8b600101545b60e08201525b8215806134d9575060608b015187516001600160a01b039081169116145b6137ad5786516001600160a01b03168152602080880151908c01516135039160058f019188613b72565b1515604083015260020b60208201819052620d89e7191261352957620d89e71960208201525b620d89e860020b816020015160020b1261354757620d89e860208201525b6135548160200151612c15565b6001600160a01b0390811660608381018290528951908e0151613591939192911680821891811160018a161891909102188960400151868c613c5f565b60c085015260a084015260808301526001600160a01b031687528a515f12156135ed576135c18160a00151613a74565b830392506135dc8160c001518260800151612ee89190614799565b6135e69083614bd2565b915061361e565b6136008160c00151826080015101613a74565b830192506136118160a00151613a74565b61361b9083614abb565b91505b831561366d575f848962ffffff161461365557620f4240858360c00151846080015101028161364f5761364f614bf1565b0461365b565b8160c001515b60c08301805182900390529990990198505b60408701516001600160801b0316156136a85760c081015160408801516001600160801b0316600160801b9091020460e08201805190910190525b606081015187516001600160a01b0391821691160361378757806040015115613762575f5f866136e1578d600101548360e001516136ec565b8260e001518e600201545b915091505f6137378f85602001518585600292830b5f90815260049094016020526040909320600181018054909203909155908101805490920390915554600160801b9004600f0b90565b90508715613742575f035b6137508a6040015182612f31565b6001600160801b031660408b01525050505b8461377157806020015161377a565b60018160200151035b60020b60208801526134bb565b805187516001600160a01b039081169116146137a857865161377a90612fba565b6134bb565b865160208801516137dd91906137c490899061324a565b6001600160a01b0319166001600160a01b039091161790565b8c55604087015160038d01546001600160801b0390811691161461382257604087015160038d0180546001600160801b0319166001600160801b039092169190911790555b846138365760e081015160028d0155613841565b60e081015160018d01555b8a515f138515151461386e5761386761385983611b6f565b611d65858e5f015103611b6f565b995061388b565b61388861387f848d5f015103611b6f565b611d6584611b6f565b99505b5050505050505b92959194509250565b6001600160a01b0383165f908152600460209081526040808320858452909152812080548392906138cd908490614786565b9091555050604080513381526020810183905283915f916001600160a01b038716915f516020614c455f395f51905f5291016117dd565b6040518381528260020b60048201528160020b6024820152604481fd5b5f838302815f1985870982811083820303915050808411613940575f5ffd5b805f0361395257508290049050610773565b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6001600160a01b0380851690861611156139d6579293925b6001600160a01b0385166139f05762bfc9215f526004601cfd5b600160601b600160e01b03606084901b166001600160a01b038686031683613a3d578660601b60601c613a2a83838960601b60601c613921565b81613a3757613a37614bf1565b04613a69565b613a69613a5483836001600160a01b038a16613dc2565b6001600160a01b038916808204910615150190565b979650505050505050565b805f811215610a3057610a306393dafdf160e01b6115bb565b5f6001600160a01b038481169086160360ff81901d90810118600160601b6001600160801b038516613ac0818484613921565b9350845f83858409111684019350505050949350505050565b5f5f8211613ae5575f5ffd5b507f0706060506020500060203020504000106050205030304010505030400000000601f6f8421084210842108cc6318c6db6d54be6001600160801b03841160071b84811c6001600160401b031060061b1784811c63ffffffff1060051b1784811c61ffff1060041b1784811c60ff1060031b1793841c1c161a1790565b62bfffff8116610a3081611a2c565b5f80600284810b9086900b8181078313919005038315613bf157600281900b60081d600181900b5f908152602089905260409020545f1960ff808516908190039190911c918216801515955090919085613bd357888360ff16860302613be6565b88613bdd82613ad9565b840360ff168603025b965050505050613c55565b6001908101600281900b60081d80830b5f90815260208a905260409020545f1960ff841694851b011990811680151595509293919285613c3b57888360ff0360ff16860102613c4e565b8883613c4683613df2565b0360ff168601025b9650505050505b5094509492505050565b5f80808062ffffff85166001600160a01b03808a16908b1610158288128015613d35575f613c988a5f0385620f424003620f4240613921565b905082613cb157613cac8d8d8d6001613a8d565b613cbe565b613cbe8c8e8d60016139bd565b9650868110613cf2578b9750620f42408414613ce957613ce4878586620f424003613dc2565b613ceb565b865b9450613d0b565b809650613d018d8c8386613e8c565b9750868a5f030394505b82613d2157613d1c8d898d5f6139bd565b613d2d565b613d2d888e8d5f613a8d565b955050613db3565b81613d4b57613d468c8c8c5f6139bd565b613d57565b613d578b8d8c5f613a8d565b9450848910613d68578a9650613d7a565b889450613d778c8b8785613eda565b96505b81613d9157613d8c8c888c6001613a8d565b613d9e565b613d9e878d8c60016139bd565b9550613db0868485620f424003613dc2565b93505b50505095509550955095915050565b5f613dce848484613921565b90508180613dde57613dde614bf1565b838509156107735760010180610773575f5ffd5b5f5f8211613dfe575f5ffd5b507e1f0d1e100c1d070f090b19131c1706010e11080a1a141802121b15031604055f8290039091166101e07f804040554300526644320000502061067405302602000010750620017611707760fc7fb6db6db6ddddddddd34d34d349249249210842108c6318c639ce739cffffffff840260f81c161b60f71c1690811c63d76453e004601f169190911a1790565b5f6001600160801b038416156001600160a01b038616151715613eb657634f2461b85f526004601cfd5b81613ecd57613ec88585856001613f1d565b611f22565b611f228585856001614008565b5f6001600160801b038416156001600160a01b038616151715613f0457634f2461b85f526004601cfd5b81613f1557613ec88585855f614008565b611f228585855f5b5f8115613f8d575f6001600160a01b03841115613f5157613f4c84600160601b6001600160801b038816613921565b613f68565b613f686001600160801b038616606086901b614c05565b9050613f85613f80826001600160a01b038916614799565b6140ea565b9150506115b3565b5f6001600160a01b03841115613fba57613fb584600160601b6001600160801b038816613dc2565b613fd7565b613fd7606085901b6001600160801b038716808204910615150190565b9050806001600160a01b03871611613ff657634323a5555f526004601cfd5b6001600160a01b0386160390506115b3565b5f825f036140175750836115b3565b600160601b600160e01b03606085901b1682156140a9576001600160a01b0386168481029085828161404b5761404b614bf1565b040361407b578181018281106140795761406f836001600160a01b038a1683613dc2565b93505050506115b3565b505b50613f8581856140946001600160a01b038a1683614c05565b61409e9190614799565b808204910615150190565b6001600160a01b0386168481029085820414818311166140d05763f5c787f15f526004601cfd5b80820361406f613f80846001600160a01b038b1684613dc2565b806001600160a01b0381168114610a3057610a306393dafdf160e01b6115bb565b6001600160a01b03811681146111d5575f5ffd5b5f5f60408385031215614130575f5ffd5b823561413b8161410b565b946020939093013593505050565b5f60208284031215614159575f5ffd5b81356001600160e01b031981168114610773575f5ffd5b5f5f5f60608486031215614182575f5ffd5b833561418d8161410b565b95602085013595506040909401359392505050565b5f5f5f606084860312156141b4575f5ffd5b83356141bf8161410b565b925060208401356141cf8161410b565b929592945050506040919091013590565b5f602082840312156141f0575f5ffd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b038111828210171561422d5761422d6141f7565b60405290565b604051601f8201601f191681016001600160401b038111828210171561425b5761425b6141f7565b604052919050565b803562ffffff81168114610a30575f5ffd5b8035600281900b8114610a30575f5ffd5b5f60a08284031215614296575f5ffd5b60405160a081016001600160401b03811182821017156142b8576142b86141f7565b60405290508082356142c98161410b565b815260208301356142d98161410b565b60208201526142ea60408401614263565b60408201526142fb60608401614275565b6060820152608083013561430e8161410b565b6080919091015292915050565b5f5f83601f84011261432b575f5ffd5b5081356001600160401b03811115614341575f5ffd5b602083019150836020828501011115614358575f5ffd5b9250929050565b5f5f5f5f5f6101008688031215614374575f5ffd5b61437e8787614286565b945060a0860135935060c0860135925060e08601356001600160401b038111156143a6575f5ffd5b6143b28882890161431b565b969995985093965092949392505050565b5f602082840312156143d3575f5ffd5b81356107738161410b565b5f5f604083850312156143ef575f5ffd5b50508035926020909101359150565b602080825282518282018190525f918401906040840190835b81811015614435578351835260209384019390920191600101614417565b509095945050505050565b5f5f60208385031215614451575f5ffd5b82356001600160401b03811115614466575f5ffd5b6144728582860161431b565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f60c083850312156144c4575f5ffd5b6144ce8484614286565b91506144dc60a08401614263565b90509250929050565b80358015158114610a30575f5ffd5b5f5f60408385031215614505575f5ffd5b82356145108161410b565b91506144dc602084016144e5565b5f5f5f5f848603610140811215614533575f5ffd5b61453d8787614286565b94506080609f1982011215614550575f5ffd5b5061455961420b565b61456560a08701614275565b815261457360c08701614275565b602082015260e08601356040820152610100860135606082015292506101208501356001600160401b038111156145a8575f5ffd5b6145b48782880161431b565b95989497509550505050565b5f5f60c083850312156145d1575f5ffd5b6145db8484614286565b915060a08301356145eb8161410b565b809150509250929050565b5f5f60208385031215614607575f5ffd5b82356001600160401b0381111561461c575f5ffd5b8301601f8101851361462c575f5ffd5b80356001600160401b03811115614641575f5ffd5b8560208260051b8401011115614655575f5ffd5b6020919091019590945092505050565b5f5f60408385031215614676575f5ffd5b82356146818161410b565b915060208301356145eb8161410b565b5f5f5f5f8486036101208112156146a6575f5ffd5b6146b08787614286565b94506060609f19820112156146c3575f5ffd5b50604051606081016001600160401b03811182821017156146e6576146e66141f7565b6040526146f560a087016144e5565b815260c0860135602082015260e086013561470f8161410b565b604082015292506101008501356001600160401b038111156145a8575f5ffd5b5f5f5f5f60808587031215614742575f5ffd5b843561474d8161410b565b9350602085013561475d8161410b565b93969395505050506040820135916060013590565b634e487b7160e01b5f52601160045260245ffd5b818103818111156106cd576106cd614772565b808201808211156106cd576106cd614772565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6115b36020830184866147ac565b5f602082840312156147f7575f5ffd5b81516001600160401b0381111561480c575f5ffd5b8201601f8101841361481c575f5ffd5b80516001600160401b03811115614835576148356141f7565b614848601f8201601f1916602001614233565b81815285602083850101111561485c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b80516001600160a01b03908116835260208083015182169084015260408083015162ffffff169084015260608083015160020b9084015260809182015116910152565b6001600160a01b03871681526148d56020820187614879565b8460c08201528360e08201526101206101008201525f6148fa610120830184866147ac565b98975050505050505050565b6001600160a01b038616815261491f6020820186614879565b8351600290810b60c08301526020850151900b60e0820152604084015161010082015260608401516101208201526101606101408201525f613a69610160830184866147ac565b6001600160a01b038816815261497f6020820188614879565b8551600290810b60c08301526020870151900b60e08201526040860151610100820152606086015161012082015284610140820152836101608201526101a06101808201525f61323d6101a0830184866147ac565b6001600160a01b038416815260e081016149f16020830185614879565b6001600160a01b039290921660c0919091015292915050565b6001600160a01b03851681526101008101614a286020830186614879565b6001600160a01b039390931660c082015260029190910b60e09091015292915050565b5f60208284031215614a5b575f5ffd5b5051919050565b6001600160a01b0386168152614a7b6020820186614879565b8351151560c0820152602084015160e082015260408401516001600160a01b03166101008201526101406101208201525f613a69610140830184866147ac565b8082018281125f831280158216821582161715610f8a57610f8a614772565b6001600160a01b0387168152614af36020820187614879565b8451151560c0820152602085015160e082015260408501516001600160a01b0316610100820152836101208201526101606101408201525f6148fa610160830184866147ac565b600f81810b9083900b0160016001607f1b03811360016001607f1b0319821217156106cd576106cd614772565b805160208201516001600160e01b0319811691906004821015614b9e576001600160e01b0319600483900360031b81901b82161692505b5050919050565b600f82810b9082900b0360016001607f1b0319811260016001607f1b03821317156106cd576106cd614772565b8181035f83128015838313168383128216171561291557612915614772565b634e487b7160e01b5f52601260045260245ffd5b5f82614c1f57634e487b7160e01b5f52601260045260245ffd5b50049056fe27e098c505d44ec3574004bca052aabf76bd35004c182099d8c575fb238593b91b3d7edb2e9c0b0e7c525b20aaaef0f5940d2ed71663c7d39266ecafac728859c090fc4683624cfc3884e9d8de5eca132f2d0ec062aff75d43c0465d5ceeab237d4b3164c6e45b97e7d87b7125a44c5828d005af88f9d751cfd78729c5d99a0b