UNPKG

@airdao/astra-cl-periphery

Version:

🎚 Peripheral smart contracts for interacting with AstraDEX Concentrated Liquidity version

487 lines • 109 kB
{ "_format": "hh-sol-artifact-1", "contractName": "NFTDescriptorTest", "sourceName": "contracts/test/NFTDescriptorTest.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" } ], "name": "addressToString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "quoteTokenAddress", "type": "address" }, { "internalType": "address", "name": "baseTokenAddress", "type": "address" }, { "internalType": "string", "name": "quoteTokenSymbol", "type": "string" }, { "internalType": "string", "name": "baseTokenSymbol", "type": "string" }, { "internalType": "uint8", "name": "quoteTokenDecimals", "type": "uint8" }, { "internalType": "uint8", "name": "baseTokenDecimals", "type": "uint8" }, { "internalType": "bool", "name": "flipRatio", "type": "bool" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "int24", "name": "tickCurrent", "type": "int24" }, { "internalType": "int24", "name": "tickSpacing", "type": "int24" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "poolAddress", "type": "address" } ], "internalType": "struct NFTDescriptor.ConstructTokenURIParams", "name": "params", "type": "tuple" } ], "name": "constructTokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint24", "name": "fee", "type": "uint24" } ], "name": "feeToPercentString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "uint160", "name": "sqrtRatioX96", "type": "uint160" }, { "internalType": "uint8", "name": "token0Decimals", "type": "uint8" }, { "internalType": "uint8", "name": "token1Decimals", "type": "uint8" } ], "name": "fixedPointToDecimalString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "quoteTokenAddress", "type": "address" }, { "internalType": "address", "name": "baseTokenAddress", "type": "address" }, { "internalType": "string", "name": "quoteTokenSymbol", "type": "string" }, { "internalType": "string", "name": "baseTokenSymbol", "type": "string" }, { "internalType": "uint8", "name": "quoteTokenDecimals", "type": "uint8" }, { "internalType": "uint8", "name": "baseTokenDecimals", "type": "uint8" }, { "internalType": "bool", "name": "flipRatio", "type": "bool" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "int24", "name": "tickCurrent", "type": "int24" }, { "internalType": "int24", "name": "tickSpacing", "type": "int24" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "poolAddress", "type": "address" } ], "internalType": "struct NFTDescriptor.ConstructTokenURIParams", "name": "params", "type": "tuple" } ], "name": "generateSVGImage", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "quoteTokenAddress", "type": "address" }, { "internalType": "address", "name": "baseTokenAddress", "type": "address" }, { "internalType": "string", "name": "quoteTokenSymbol", "type": "string" }, { "internalType": "string", "name": "baseTokenSymbol", "type": "string" }, { "internalType": "uint8", "name": "quoteTokenDecimals", "type": "uint8" }, { "internalType": "uint8", "name": "baseTokenDecimals", "type": "uint8" }, { "internalType": "bool", "name": "flipRatio", "type": "bool" }, { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" }, { "internalType": "int24", "name": "tickCurrent", "type": "int24" }, { "internalType": "int24", "name": "tickSpacing", "type": "int24" }, { "internalType": "uint24", "name": "fee", "type": "uint24" }, { "internalType": "address", "name": "poolAddress", "type": "address" } ], "internalType": "struct NFTDescriptor.ConstructTokenURIParams", "name": "params", "type": "tuple" } ], "name": "getGasCostOfConstructTokenURI", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "poolAddress", "type": "address" } ], "name": "isRare", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tickLower", "type": "int24" }, { "internalType": "int24", "name": "tickUpper", "type": "int24" } ], "name": "rangeLocation", "outputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" } ], "name": "sliceTokenHex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "int24", "name": "tick", "type": "int24" }, { "internalType": "int24", "name": "tickSpacing", "type": "int24" }, { "internalType": "uint8", "name": "token0Decimals", "type": "uint8" }, { "internalType": "uint8", "name": "token1Decimals", "type": "uint8" }, { "internalType": "bool", "name": "flipRatio", "type": "bool" } ], "name": "tickToDecimalString", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "offset", "type": "uint256" } ], "name": "tokenToColorHex", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "pure", "type": "function" } ], "bytecode": "0x608060405234801561001057600080fd5b50615e3c806100206000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063d5c0bdd811610081578063e73869061161005b578063e738690614610197578063ea4d3bcd146101b7578063f93a7911146101ca576100c9565b8063d5c0bdd81461015e578063d6986d4514610171578063e1649fcf14610184576100c9565b80635e57966d116100b25780635e57966d14610118578063854924ab1461012b5780639288c2181461014b576100c9565b80632fa2af10146100ce5780633a0cdee2146100f8575b600080fd5b6100e16100dc366004613ec7565b6101dd565b6040516100ef929190614296565b60405180910390f35b61010b610106366004613e9c565b6101f6565b6040516100ef9190614283565b61010b610126366004613e80565b610214565b61013e610139366004613fc7565b610227565b6040516100ef9190614454565b61010b610159366004613ef9565b6102c3565b61010b61016c36600461416b565b6102de565b61013e61017f366004613e9c565b6102f5565b61010b610192366004614000565b61030a565b6101aa6101a53660046141c9565b610315565b6040516100ef9190614278565b61010b6101c53660046141af565b610321565b61010b6101d8366004613fc7565b61032c565b6060806101ea84846103ba565b915091505b9250929050565b606061020b836001600160a01b0316836107eb565b90505b92915050565b606061021f826107fa565b90505b919050565b6000805a60405163c49917d760e01b815290915073__$cea9be979eee3d87fb124d6cbb244bb0b5$__9063c49917d7906102659086906004016142bb565b60006040518083038186803b15801561027d57600080fd5b505af4158015610291573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102b99190810190613f5d565b505a900392915050565b60606102d28686868686610810565b90505b95945050505050565b60606102eb84848461093a565b90505b9392505050565b600061020b836001600160a01b031683610b0e565b606061021f82610b15565b600061020b8383610d50565b606061021f82610db3565b60405163c49917d760e01b815260609073__$cea9be979eee3d87fb124d6cbb244bb0b5$__9063c49917d7906103669085906004016142bb565b60006040518083038186803b15801561037e57600080fd5b505af4158015610392573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261021f9190810190613f5d565b60608060006002858501810b0590506201e847198160020b121561043257604051806040016040528060018152602001600760fb1b8152506040518060400160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525092509250506101ef565b620124f7198160020b121561049b57604051806040016040528060018152602001600760fb1b8152506040518060400160405280600481526020017f31302e350000000000000000000000000000000000000000000000000000000081525092509250506101ef565b6161a7198160020b121561050357604051806040016040528060018152602001600760fb1b8152506040518060400160405280600581526020017f31342e323500000000000000000000000000000000000000000000000000000081525092509250506101ef565b611387198160020b121561056c576040518060400160405280600281526020017f313000000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161062760f31b81525092509250506101ef565b60008160020b12156105d3576040518060400160405280600281526020017f313100000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323160f01b81525092509250506101ef565b6113888160020b1215610656576040518060400160405280600281526020017f31330000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f323300000000000000000000000000000000000000000000000000000000000081525092509250506101ef565b6161a88160020b12156106d9576040518060400160405280600281526020017f31350000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f323500000000000000000000000000000000000000000000000000000000000081525092509250506101ef565b620124f88160020b12156107425760405180604001604052806002815260200161062760f31b8152506040518060400160405280600281526020017f323600000000000000000000000000000000000000000000000000000000000081525092509250506101ef565b6201e8488160020b12156107905760405180604001604052806002815260200161323160f01b81525060405180604001604052806002815260200161323760f01b81525092509250506101ef565b6040518060400160405280600281526020017f323400000000000000000000000000000000000000000000000000000000000081525060405180604001604052806002815260200161323760f01b81525092509250506101ef565b606061020b83831c600361100e565b606061021f6001600160a01b03831660146110d5565b606084600281900b620d89e7198161082457fe5b050260020b8660020b141561087e57811561085a576040518060400160405280600381526020016209a82b60eb1b815250610877565b6040518060400160405280600381526020016226a4a760e91b8152505b90506102d5565b84600281900b620d89e88161088f57fe5b050260020b8660020b14156108e55781156108c5576040518060400160405280600381526020016226a4a760e91b815250610877565b5060408051808201909152600381526209a82b60eb1b60208201526102d5565b60006108f08761125d565b905082156109275761092478010000000000000000000000000000000000000000000000006001600160a01b0383166115ab565b90505b61093281868661093a565b9150506102d5565b60606000610949858585611612565b90506000610961828368010000000000000000611714565b90506c01000000000000000000000000821080156109a25761099b8272047bf19673df52e37f2410011d100000000000600160801b611714565b91506109b7565b6109b482620186a0600160801b611714565b91505b8160005b81156109cf57600101600a820491506109bb565b600019016000806109e086846117c3565b9150915080156109f1576001909201915b6109f9613d9a565b8515610a6c57610a18610a10602b60ff871661182f565b60079061188c565b60ff908116602083015260026080830152610a4490600190610a3e90602b90881661182f565b9061188c565b60ff90811660a08301526020820151610a5f9116600161182f565b60ff166040820152610ae3565b60098460ff1610610ab557610a8560ff8516600461182f565b60ff166020820181905260056080830152610aa190600161182f565b60ff1660a082015260046040820152610ae3565b60066020820152600560408201819052610ada90600190610a3e9060ff88169061182f565b60ff1660608201525b82815285151560c0820152600060e0820152610afe816118e6565b9c9b505050505050505050505050565b1c60ff1690565b60606000604051806102a00160405280610b3285602001516107fa565b8152602001610b4485604001516107fa565b8152602001846101a001516001600160a01b031681526020018460600151815260200184608001518152602001610b7f856101800151610db3565b815260200184610100015160020b815260200184610120015160020b815260200184610160015160020b8152602001610bc8856101000151866101200151876101400151611b12565b60000b815260200184600001518152602001610bf285602001516001600160a01b031660886107eb565b8152602001610c0f85604001516001600160a01b031660886107eb565b8152602001610c2c85602001516001600160a01b031660006107eb565b8152602001610c4985604001516001600160a01b031660006107eb565b8152602001610c7c610c6e86602001516001600160a01b031660108860000151611b49565b600060ff6010610112611b69565b8152602001610caf610ca186604001516001600160a01b031660108860000151611b49565b600060ff60646101e4611b69565b8152602001610cd4610c6e86602001516001600160a01b031660208860000151611b49565b8152602001610cf9610ca186604001516001600160a01b031660208860000151611b49565b8152602001610d1e610c6e86602001516001600160a01b031660308860000151611b49565b8152602001610d43610ca186604001516001600160a01b031660308860000151611b49565b905290506102ee81611ba7565b6040805160208082018590526bffffffffffffffffffffffff19606085901b16828401528251603481840301815260549092019092528051910120600090610d9784611e36565b60020260010160ff1660001981610daa57fe5b04119392505050565b606062ffffff8216610df9575060408051808201909152600281527f30250000000000000000000000000000000000000000000000000000000000006020820152610222565b816000805b62ffffff831615610e495760ff811615610e1a57600101610e33565b600a62ffffff84160662ffffff16600014610e33576001015b600190910190600a62ffffff8416049250610dfe565b610e51613d9a565b600060058410610f405760006004610e6c8660ff871661182f565b1015610e79576001610e7c565b60005b60ff9081169150610e90908516600161182f565b610e9b86600561182f565b10610ec757610ec2610eb160ff8616600161182f565b610ebc87600561182f565b9061182f565b610eca565b60005b60ff851660808501819052909250610ee990600190610ebc908561188c565b60ff90811660a08501526080840151610f0a918391610a3e9116600161182f565b60ff9081166040850152610f32908290610a3e90610f2b908816600161188c565b859061188c565b60ff16602084015250610fb0565b610f4b60058561182f565b600260808401819052909150610f6990600190610ebc90849061188c565b60ff90811660a0840152610f8b90610f84908516600261188c565b829061188c565b60ff1660208301819052610fa090600261182f565b60ff166040830152600160c08301525b610fcf610fc08560ff861661182f565b62ffffff891690600a0a6115ab565b8252600160e083015260048411610fe7576000610ff2565b610ff284600461182f565b60ff166060830152611003826118e6565b979650505050505050565b606060008260020267ffffffffffffffff8111801561102c57600080fd5b506040519080825280601f01601f191660200182016040528015611057576020820181803683370190505b5080519091505b80156110cd577f303132333435363738396162636465660000000000000000000000000000000085600f166010811061109357fe5b1a60f81b8260018303815181106110a657fe5b60200101906001600160f81b031916908160001a90535060049490941c936000190161105e565b509392505050565b606060008260020260020167ffffffffffffffff811180156110f657600080fd5b506040519080825280601f01601f191660200182016040528015611121576020820181803683370190505b509050600360fc1b8160008151811061113657fe5b60200101906001600160f81b031916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061117b57fe5b60200101906001600160f81b031916908160001a905350600160028402015b6001811115611209577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106111d257fe5b1a60f81b8282815181106111e257fe5b60200101906001600160f81b031916908160001a90535060049490941c936000190161119a565b50831561020b576040805162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e74604482015290519081900360640190fd5b60008060008360020b12611274578260020b61127c565b8260020b6000035b9050620d89e88111156112d6576040805162461bcd60e51b815260206004820152600160248201527f5400000000000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6000600182166112ea57600160801b6112fc565b6ffffcb933bd6fad37aa2d162d1a5940015b70ffffffffffffffffffffffffffffffffff1690506002821615611330576ffff97272373d413259a46990580e213a0260801c5b600482161561134f576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b600882161561136e576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b601082161561138d576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156113ac576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156113cb576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156113ea576ffe5dee046a99a2a811c461f1969c30530260801c5b61010082161561140a576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b61020082161561142a576ff987a7253ac413176f2b074cf7815e540260801c5b61040082161561144a576ff3392b0822b70005940c7a398e4b70f30260801c5b61080082161561146a576fe7159475a2c29b7443b29c7fa6e889d90260801c5b61100082161561148a576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156114aa576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156114ca576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156114ea576f31be135f97d08fd981231505542fcfa60260801c5b6201000082161561150b576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b6202000082161561152b576e5d6af8dedb81196699c329225ee6040260801c5b6204000082161561154a576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615611567576b048a170391f7dc42444e8fa20260801c5b60008460020b131561158257806000198161157e57fe5b0490505b640100000000810615611596576001611599565b60005b60ff16602082901c0192505050919050565b6000808211611601576040805162461bcd60e51b815260206004820152601a60248201527f536166654d6174683a206469766973696f6e206279207a65726f000000000000604482015290519081900360640190fd5b81838161160a57fe5b049392505050565b60008061162d61162860ff868116908616611ed6565b611f3b565b9050600081118015611640575060128111155b15611701578260ff168460ff1611156116aa576116746116618260026115ab565b6001600160a01b03871690600a0a611f52565b915060028106600114156116a5576116a2827003298b075b4b6a5240945790619b37fd4a600160801b611714565b91505b6116fc565b6116cb6116b88260026115ab565b6001600160a01b03871690600a0a6115ab565b915060028106600114156116fc576116f982600160801b7003298b075b4b6a5240945790619b37fd4a611714565b91505b6110cd565b50506001600160a01b0390921692915050565b600080806000198587098686029250828110908390030390508061174a576000841161173f57600080fd5b5082900490506102ee565b80841161175657600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600080600060058460ff1611156117eb576117e88560ff600419870116600a0a6115ab565b94505b60006004600a870611905061180186600a6115ab565b95508015611810578560010195505b85620186a0141561182657600a86049550600191505b50939492505050565b600082821115611886576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60008282018381101561020b576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60606000826020015160ff1667ffffffffffffffff8111801561190857600080fd5b506040519080825280601f01601f191660200182016040528015611933576020820181803683370190505b5090508260e0015115611989577f25000000000000000000000000000000000000000000000000000000000000008160018351038151811061197157fe5b60200101906001600160f81b031916908160001a9053505b8260c00151156119e657600360fc1b816000815181106119a557fe5b60200101906001600160f81b031916908160001a905350601760f91b816001815181106119ce57fe5b60200101906001600160f81b031916908160001a9053505b608083015160ff165b60a0840151611a029060ff16600161188c565b811015611a3957603060f81b828281518110611a1a57fe5b60200101906001600160f81b031916908160001a9053506001016119ef565b505b82511561021f576000836060015160ff16118015611a665750826060015160ff16836040015160ff16145b15611aa95760408301805160ff600019820181169092528251601760f91b92849216908110611a9157fe5b60200101906001600160f81b031916908160001a9053505b8251611abb90603090600a900661188c565b60f81b818460400180518091906001900360ff1660ff1681525060ff1681518110611ae257fe5b60200101906001600160f81b031916908160001a905350600a8360000181815181611b0957fe5b04905250611a3b565b60008360020b8260020b1215611b2b57506000196102ee565b8260020b8260020b1315611b41575060016102ee565b5060006102ee565b600060ff82611b588686610b0e565b0281611b6057fe5b06949350505050565b60606102d2611ba284610a3e611b7f888a61182f565b611b9c611b8c888a61182f565b611b968d8d61182f565b90611f52565b906115ab565b611fab565b6060611bb282612086565b611bce836000015184602001518560600151866080015161273a565b611be5846060015185608001518660a00151612a65565b611c038560c001518660e00151876101000151886101200151612bd1565b611c23611c14876101400151611fab565b8760c001518860e00151612f24565b611c368761014001518860400151613355565b6040516020018087805190602001908083835b60208310611c685780518252601f199092019160209182019101611c49565b51815160209384036101000a600019018019909216911617905289519190930192890191508083835b60208310611cb05780518252601f199092019160209182019101611c91565b51815160209384036101000a600019018019909216911617905288519190930192880191508083835b60208310611cf85780518252601f199092019160209182019101611cd9565b51815160209384036101000a600019018019909216911617905287519190930192870191508083835b60208310611d405780518252601f199092019160209182019101611d21565b51815160209384036101000a600019018019909216911617905286519190930192860191508083835b60208310611d885780518252601f199092019160209182019101611d69565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310611dd05780518252601f199092019160209182019101611db1565b5181516020939093036101000a60001901801990911692169190911790527f3c2f7376673e000000000000000000000000000000000000000000000000000092019182525060408051808303601919018152600690920190529998505050505050505050565b6000808211611e4457600080fd5b600160801b8210611e5757608091821c91015b680100000000000000008210611e6f57604091821c91015b6401000000008210611e8357602091821c91015b620100008210611e9557601091821c91015b6101008210611ea657600891821c91015b60108210611eb657600491821c91015b60048210611ec657600291821c91015b6002821061022257600101919050565b6000818303818312801590611eeb5750838113155b80611f005750600083128015611f0057508381135b61020b5760405162461bcd60e51b8152600401808060200182810382526024815260200180615bd06024913960400191505060405180910390fd5b600080821215611f4e578160000361021f565b5090565b600082611f615750600061020e565b82820282848281611f6e57fe5b041461020b5760405162461bcd60e51b81526004018080602001828103825260218152602001806152e96021913960400191505060405180910390fd5b606081611fd057506040805180820190915260018152600360fc1b6020820152610222565b8160005b8115611fe857600101600a82049150611fd4565b60008167ffffffffffffffff8111801561200157600080fd5b506040519080825280601f01601f19166020018201604052801561202c576020820181803683370190505b50859350905060001982015b831561207d57600a840660300160f81b8282806001900393508151811061205b57fe5b60200101906001600160f81b031916908160001a905350600a84049350612038565b50949350505050565b606061211b8261016001516040516020018080614ea36081913960810182805190602001908083835b602083106120ce5780518252601f1990920191602091820191016120af565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b8152506009019150506040516020818303038152906040526133cd565b612287836101e0015184610200015185610180015160405160200180806149e06063913960630184805190602001908083835b6020831061216d5780518252601f19909201916020918201910161214e565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b602083106121c75780518252601f1990920191602091820191016121a8565b51815160209384036101000a60001901801990921691161790527f2720723d273132307078272066696c6c3d272300000000000000000000000000919093019081528451601390910192850191508083835b602083106122385780518252601f199092019160209182019101612219565b6001836020036101000a038019825116818451168082178552505050505050905001806813979f1e17b9bb339f60b91b81525060090193505050506040516020818303038152906040526133cd565b6122d8846102200151856102400151866101a0015160405160200180806149e06063913960630184805190602001908083836020831061216d5780518252601f19909201916020918201910161214e565b6123f7856102600151866102800151876101c0015160405160200180806149e06063913960630184805190602001908083835b6020831061232a5780518252601f19909201916020918201910161230b565b51815160209384036101000a600019018019909216911617905265272063793d2760d01b919093019081528551600690910192860191508083835b602083106123845780518252601f199092019160209182019101612365565b51815160001960209485036101000a019081169019919091161790527f2720723d273130307078272066696c6c3d2723000000000000000000000000009390910192835284516013909301929085019150808383602083106122385780518252601f199092019160209182019101612219565b61016086015160405160200180605661475b8239605601602c61510a82397f3c646566733e0000000000000000000000000000000000000000000000000000602c820152603201604b614e588239604b0186805190602001908083835b602083106124735780518252601f199092019160209182019101612454565b6001836020036101000a03801982511681845116808217855250505050505090500180615990603e9139603e0185805190602001908083835b602083106124cb5780518252601f1990920191602091820191016124ac565b6001836020036101000a03801982511681845116808217855250505050505090500180614f24603e9139603e0184805190602001908083835b602083106125235780518252601f199092019160209182019101612504565b5181516020939093036101000a60001901801990911692169190911790527f22202f3e00000000000000000000000000000000000000000000000000000000920191825250600401603b6146538239603b0183805190602001908083835b602083106125a05780518252601f199092019160209182019101612581565b6001836020036101000a03801982511681845116808217855250505050505090500180614aa060999139609901607f6155418239607f01608861590882396088016041614b398239604101605d615ac88239605d0160726155ed823960720160496145bc823960490160be614d9a823960be01607161486c8239607101607561548482396075016066614b7a823960660160a4615136823960a40160856159ce82397f3c6720636c69702d706174683d2275726c2823636f726e65727329223e00000060858201527f3c726563742066696c6c3d22000000000000000000000000000000000000000060a2820152825160ae9091019060208401908083835b602083106126be5780518252601f19909201916020918201910161269f565b6001836020036101000a03801982511681845116808217855250505050505090500180614be060319139603101604e6146058239604e01605d614a438239605d01604161508982396041016052614f6282396052016075615a538239607501955050505050506040516020818303038152906040529050919050565b60608382858488878a896040516020018080615bab60259139602501607d614d1d8239607d0189805190602001908083835b6020831061278b5780518252601f19909201916020918201910161276c565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528a516005909101928b0191508083835b602083106127e45780518252601f1990920191602091820191016127c5565b6001836020036101000a03801982511681845116808217855250505050505090500180614c11607991396079016086615b25823960860187805190602001908083835b602083106128465780518252601f199092019160209182019101612827565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528851600590910192890191508083835b6020831061289f5780518252601f199092019160209182019101612880565b6001836020036101000a038019825116818451168082178552505050505050905001806147e760859139608501607b6157768239607b0185805190602001908083835b602083106129015780518252601f1990920191602091820191016128e2565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528651600590910192870191508083835b6020831061295a5780518252601f19909201916020918201910161293b565b6001836020036101000a03801982511681845116808217855250505050505090500180614931605d9139605d0160a36153e1823960a30183805190602001908083835b602083106129bc5780518252601f19909201916020918201910161299d565b51815160209384036101000a600019018019909216911617905264010714051160dd1b919093019081528451600590910192850191508083835b60208310612a155780518252601f1990920191602091820191016129f6565b6001836020036101000a03801982511681845116808217855250505050505090500180614531608b9139608b01985050505050505050506040516020818303038152906040529050949350505050565b6060838383604051602001808061468e60cd913960cd0184805190602001908083835b60208310612aa75780518252601f199092019160209182019101612a88565b6001836020036101000a038019825116818451168082178552505050505050905001807f2f0000000000000000000000000000000000000000000000000000000000000081525060010183805190602001908083835b60208310612b1c5780518252601f199092019160209182019101612afd565b6001836020036101000a03801982511681845116808217855250505050505090500180615d546077913960770182805190602001908083835b60208310612b745780518252601f199092019160209182019101612b55565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b016073615bf48239607301935050505060405160208183030381529060405290509392505050565b606060008260000b600114612c63578260000b60001914612c27576040518060400160405280600581526020017f236e6f6e65000000000000000000000000000000000000000000000000000000815250612c5e565b6040518060400160405280600a81526020017f23666164652d646f776e000000000000000000000000000000000000000000008152505b612c9a565b6040518060400160405280600881526020017f23666164652d75700000000000000000000000000000000000000000000000008152505b90506000612ca9878787613552565b905081818383612cb8886137a0565b60405160200180807f3c67206d61736b3d2275726c2800000000000000000000000000000000000000815250600d0186805190602001908083835b60208310612d125780518252601f199092019160209182019101612cf3565b5181516020939093036101000a600019018019909116921691909117905261149160f11b92019182525060020160776151da823960770185805190602001908083835b60208310612d745780518252601f199092019160209182019101612d55565b6001836020036101000a038019825116818451168082178552505050505050905001806148dd60549139605401807f3c2f673e3c67206d61736b3d2275726c2800000000000000000000000000000081525060110184805190602001908083835b60208310612df45780518252601f199092019160209182019101612dd5565b5181516020939093036101000a600019018019909116921691909117905261149160f11b9201918252506002016029615251823960290160456152a48239604501807f3c7061746820643d22000000000000000000000000000000000000000000000081525060090183805190602001908083835b60208310612e885780518252601f199092019160209182019101612e69565b6001836020036101000a038019825116818451168082178552505050505050905001806154f96048913960480182805190602001908083835b60208310612ee05780518252601f199092019160209182019101612ec1565b6001836020036101000a0380198251168184511680821785525050505050509050019550505050505060405160208183030381529060405292505050949350505050565b60606000612f3184613c74565b90506000612f3e84613c74565b865183518251929350600490910191600a9182019101600080612f618a8a6103ba565b91509150612f7485600401600702611fab565b8b612f8486600401600702611fab565b89612f9487600401600702611fab565b8a878760405160200180806155c0602d9139602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0189805190602001908083835b60208310612fec5780518252601f199092019160209182019101612fcd565b6001836020036101000a03801982511681845116808217855250505050505090500180614fb4603d9139603d01608d615c678239608d0188805190602001908083835b6020831061304e5780518252601f19909201916020918201910161302f565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d615e038239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0187805190602001908083835b602083106130d15780518252601f1990920191602091820191016130b2565b6001836020036101000a03801982511681845116808217855250505050505090500180614fb4603d9139603d016093614c8a823960930186805190602001908083835b602083106131335780518252601f199092019160209182019101613114565b5181516020939093036101000a60001901801990911692169190911790526a1e17ba32bc3a1f1e17b39f60a91b920191825250600b01602d61498e8239602d01806c1e3932b1ba103bb4b23a341e9160991b815250600d0185805190602001908083835b602083106131b65780518252601f199092019160209182019101613197565b6001836020036101000a03801982511681845116808217855250505050505090500180614fb4603d9139603d0160936157f1823960930184805190602001908083835b602083106132185780518252601f1990920191602091820191016131f9565b6001836020036101000a03801982511681845116808217855250505050505090500180615dcb603891396038016060615cf48239606001606461537d823960640160256149bb823960250183805190602001908083835b6020831061328e5780518252601f19909201916020918201910161326f565b51815160209384036101000a60001901801990921691161790527f70782c2000000000000000000000000000000000000000000000000000000000919093019081528451600490910192850191508083835b602083106132ff5780518252601f1990920191602091820191016132e0565b6001836020036101000a038019825116818451168082178552505050505050905001806147b160369139603601985050505050505050506040516020818303038152906040529750505050505050509392505050565b60606133618383610d50565b156133b75760405160200180608d6156e98239608d01607361530a823960730160716150188239607101608a61565f8239608a01608461588482396084019050604051602081830303815290604052905061020e565b5060408051602081019091526000815292915050565b60608151600014156133ee5750604080516020810190915260008152610222565b60006040518060600160405280604081526020016150ca6040913990506000600384516002018161341b57fe5b04600402905060008160200167ffffffffffffffff8111801561343d57600080fd5b506040519080825280601f01601f191660200182016040528015613468576020820181803683370190505b509050818152600183018586518101602084015b818310156134d65760039283018051603f601282901c811687015160f890811b8552600c83901c8216880151811b6001860152600683901c8216880151811b60028601529116860151901b9382019390935260040161347c565b6003895106600181146134f0576002811461351c57613544565b7f3d3d000000000000000000000000000000000000000000000000000000000000600119830152613544565b7f3d000000000000000000000000000000000000000000000000000000000000006000198301525b509398975050505050505050565b606060008260020b85850360020b8161356757fe5b05905060048160020b136135b2576040518060400160405280601a81526020017f4d3120314334312034312031303520313035203134352031343500000000000081525091506110cd565b60088160020b136135fa576040518060400160405280601981526020017f4d3120314333332034392039372031313320313435203134350000000000000081525091506110cd565b60108160020b13613642576040518060400160405280601981526020017f4d3120314333332035372038392031313320313435203134350000000000000081525091506110cd565b60208160020b1361368a576040518060400160405280601981526020017f4d3120314332352036352038312031323120313435203134350000000000000081525091506110cd565b60408160020b136136d2576040518060400160405280601981526020017f4d3120314331372037332037332031323920313435203134350000000000000081525091506110cd565b60808160020b1361371a576040518060400160405280601881526020017f4d3120314339203831203635203133372031343520313435000000000000000081525091506110cd565b6101008160020b13613763576040518060400160405280601a81526020017f4d31203143312038392035372e3520313435203134352031343500000000000081525091506110cd565b505060408051808201909152601881527f4d3120314331203937203439203134352031343520313435000000000000000060208201529392505050565b604080518082018252600281527f37330000000000000000000000000000000000000000000000000000000000006020808301919091528251808401845260038082527f313930000000000000000000000000000000000000000000000000000000000082840152845180860186528181527f32313700000000000000000000000000000000000000000000000000000000008185015285518087019096529085527f3333340000000000000000000000000000000000000000000000000000000000928501929092526060939091906001600087900b148061388757508560000b600019145b15613a7e578560000b6000191461389e57816138a0565b835b8660000b600019146138b257816138b4565b835b8760000b600019146138c657836138c8565b855b8860000b600019146138da57836138dc565b855b60405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b602083106139255780518252601f199092019160209182019101613906565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b602083106139815780518252601f199092019160209182019101613962565b6001836020036101000a03801982511681845116808217855250505050505090500180614ff16027913960270183805190602001908083835b602083106139d95780518252601f1990920191602091820191016139ba565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b60208310613a355780518252601f199092019160209182019101613a16565b6001836020036101000a0380198251168184511680821785525050505050509050018061527a602a9139602a019450505050506040516020818303038152906040529450613c6b565b8383838360405160200180806b1e31b4b931b6329031bc1e9160a11b815250600c0185805190602001908083835b60208310613acb5780518252601f199092019160209182019101613aac565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528651600890910192870191508083835b60208310613b275780518252601f199092019160209182019101613b08565b51815160209384036101000a60001901801990921691161790527f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000919093019081526b1e31b4b931b6329031bc1e9160a11b601b8201528551602790910192860191508083835b60208310613bad5780518252601f199092019160209182019101613b8e565b51815160209384036101000a600019018019909216911617905267383c111031bc9e9160c11b919093019081528451600890910192850191508083835b60208310613c095780518252601f199092019160209182019101613bea565b6001836020036101000a038019825116818451168082178552505050505050905001807f70782220723d22347078222066696c6c3d22776869746522202f3e0000000000815250601b0194505050505060405160208183030381529060405294505b50505050919050565b6060600060405180602001604052806000815250905060008360020b1215613cd657826000190292506040518060400160405280600181526020017f2d0000000000000000000000000000000000000000000000000000000000000081525090505b80613ce38460020b611fab565b6040516020018083805190602001908083835b60208310613d155780518252601f199092019160209182019101613cf6565b51815160209384036101000a600019018019909216911617905285519190930192850191508083835b60208310613d5d5780518252601f199092019160209182019101613d3e565b6001836020036101000a03801982511681845116808217855250505050505090500192505050604051602081830303815290604052915050919050565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081019190915290565b803561022281614518565b8035801515811461022257600080fd5b8035600281900b811461022257600080fd5b600082601f830112613e1b578081fd5b8135613e2e613e2982614481565b61445d565b818152846020838601011115613e42578283fd5b816020850160208301379081016020019190915292915050565b803562ffffff8116811461022257600080fd5b803560ff8116811461022257600080fd5b600060208284031215613e91578081fd5b813561020b81614518565b60008060408385031215613eae578081fd5b8235613eb981614518565b946020939093013593505050565b60008060408385031215613ed9578182fd5b613ee283613df9565b9150613ef060208401613df9565b90509250929050565b600080600080600060a08688031215613f10578081fd5b613f1986613df9565b9450613f2760208701613df9565b9350613f3560408701613e6f565b9250613f4360608701613e6f565b9150613f5160808701613de9565b90509295509295909350565b600060208284031215613f6e578081fd5b815167ffffffffffffffff811115613f84578182fd5b8201601f81018413613f94578182fd5b8051613fa2613e2982614481565b818152856020838501011115613fb6578384fd5b6102d58260208301602086016144e8565b600060208284031215613fd8578081fd5b813567ffffffffffffffff811115613fee578182fd5b82016101c0818503121561020b578182fd5b600060208284031215614011578081fd5b813567ffffffffffffffff80821115614028578283fd5b81840191506101c080838703121561403e578384fd5b6140478161445d565b90508235815261405960208401613dde565b602082015261406a60408401613dde565b6040820152606083013582811115614080578485fd5b61408c87828601613e0b565b6060830152506080830135828111156140a3578485fd5b6140af87828601613e0b565b6080830152506140c160a08401613e6f565b60a08201526140d260c08401613e6f565b60c08201526140e360e08401613de9565b60e082015261010091506140f8828401613df9565b82820152610120915061410c828401613df9565b828201526101409150614120828401613df9565b828201526101609150614134828401613df9565b828201526101809150614148828401613e5c565b828201526101a0915061415c828401613dde565b91810191909152949350505050565b60008060006060848603121561417f578283fd5b833561418a81614518565b925061419860208501613e6f565b91506141a660408501613e6f565b90509250925092565b6000602082840312156141c0578081fd5b61020b82613e5c565b600080604083850312156141db578182fd5b8235915060208301356141ed81614518565b809150509250929050565b6001600160a01b03169052565b15159052565b60020b9052565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b600081518084526142548160208601602086016144e8565b601f01601f19169290920160200192915050565b62ffffff169052565b60ff169052565b901515815260200190565b60006020825261020b602083018461423c565b6000604082526142a9604083018561423c565b82810360208401526102d5818561423c565b600060208252823560208301526142d460208401613dde565b6142e160408401826141f8565b506142ee60408401613dde565b6142fb60608401826141f8565b5061430960608401846144a3565b6101c08060808601526143216101e086018385614212565b925061433060808701876144a3565b868503601f190160a08801529250614349848483614212565b93505061435860a08701613e6f565b915061436760c0860183614271565b61437360c08701613e6f565b915061438260e0860183614271565b61438e60e08701613de9565b915061010061439f81870184614205565b6143aa818801613df9565b9250506101206143bc8187018461420b565b6143c7818801613df9565b9250506101406143d98187018461420b565b6143e4818801613df9565b9250506101606143f68187018461420b565b614401818801613df9565b9250506101806144138187018461420b565b61441e818801613e5c565b9250506101a061443081870184614268565b61443b818801613dde565b92505061444a818601836141f8565b5090949350505050565b90815260200190565b60405181810167ffffffffffffffff8111828210171561447957fe5b604052919050565b600067ffffffffffffffff82111561449557fe5b50601f01601f191660200190565b6000808335601e198436030181126144b9578283fd5b830160208101925035905067ffffffffffffffff8111156144d957600080fd5b8036038313156101ef57600080fd5b60005b838110156145035781810151838201526020016144eb565b83811115614512576000848401525b50505050565b6001600160a01b038116811461452d57600080fd5b5056fe203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e3c2f74657874506174683e3c2f746578743e3c73746f70206f66667365743d222e39222073746f702d636f6c6f723d227768697465222073746f702d6f7061636974793d223022202f3e3c2f6c696e6561724772616469656e743e3c72656374207374796c653d2266696c7465723a2075726c28236631292220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22353030707822202f3e3c6665496d61676520726573756c743d2270332220786c696e6b3a687265663d22646174613a696d6167652f7376672b786d6c3b6261736536342c3c67206d61736b3d2275726c2823666164652d73796d626f6c29223e3c726563742066696c6c3d226e6f6e652220783d223070782220793d22307078222077696474683d22323930707822206865696768743d22323030707822202f3e203c7465787420793d22373070782220783d2233327078222066696c6c3d2277686974652220666f6e742d66616d696c793d2227436f7572696572204e6577272c206d6f6e6f73706163652220666f6e742d7765696768743d223230302220666f6e742d73697a653d2233367078223e3c7376672077696474683d2232393022206865696768743d22353030222076696577426f783d2230203020323930203530302220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672270782c2030707829222063783d22307078222063793d223070782220723d22347078222066696c6c3d227768697465222f3e3c2f673e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d223330732220726570656174436f756e743d22696e646566696e69746522202f3e203c2f74657874506174683e3c6d61736b2069643d22666164652d757022206d61736b436f6e74656e74556e6974733d226f626a656374426f756e64696e67426f78223e3c726563742077696474683d223122206865696768743d2231222066696c6c3d2275726c2823677261642d75702922202f3e3c2f6d61736b3e22207374726f6b653d227267626128302c302c302c302e332922207374726f6b652d77696474683d2233327078222066696c6c3d226e6f6e6522207374726f6b652d6c696e656361703d22726f756e6422202f3e203c616e696d6174652061646469746976653d2273756d22206174747269627574654e616d653d2273746172744f6666736574222066726f6d3d2230252220746f3d22313030252220626567696e3d22307322206475723d2233307322203c67207374796c653d227472616e73666f726d3a7472616e736c61746528323970782c20343434707829223e3c636972636c65207374796c653d227472616e73666f726d3a7472616e736c6174653364283c7376672077696474683d2732393027206865696768743d27353030272076696577426f783d2730203020323930203530302720786d6c6e733d27687474703a2f2f7777772e77332e6f72672f323030302f737667273e3c636972636c652063783d27203c67207374796c653d2266696c7465723a75726c2823746f702d726567696f6e2d626c7572293b207472616e73666f726d3a7363616c6528312e35293b207472616e73666f726d2d6f726967696e3a63656e74657220746f703b223e22202f3e3c6665426c656e64206d6f64653d226f7665726c61792220696e3d2270302220696e323d22703122202f3e3c6665426c656e64206d6f64653d226578636c7573696f6e22