feat(solc): add source map parser (#658)
* feat(solc): add source map parser * merge branch master * make some types private * chore: make id an option * fix: support negative field values * check parsed element
This commit is contained in:
parent
10f014bd6c
commit
88b342287a
|
@ -11,7 +11,13 @@ use std::{
|
||||||
str::FromStr,
|
str::FromStr,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{compile::*, error::SolcIoError, remappings::Remapping, utils};
|
use crate::{
|
||||||
|
compile::*,
|
||||||
|
error::SolcIoError,
|
||||||
|
remappings::Remapping,
|
||||||
|
sourcemap::{self, SourceMap, SyntaxError},
|
||||||
|
utils,
|
||||||
|
};
|
||||||
use ethers_core::abi::Address;
|
use ethers_core::abi::Address;
|
||||||
use serde::{de::Visitor, Deserialize, Deserializer, Serialize, Serializer};
|
use serde::{de::Visitor, Deserialize, Deserializer, Serialize, Serializer};
|
||||||
|
|
||||||
|
@ -813,6 +819,13 @@ pub struct Bytecode {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Bytecode {
|
impl Bytecode {
|
||||||
|
/// Returns the parsed source map
|
||||||
|
///
|
||||||
|
/// See also https://docs.soliditylang.org/en/v0.8.10/internals/source_mappings.html
|
||||||
|
pub fn source_map(&self) -> Option<Result<SourceMap, SyntaxError>> {
|
||||||
|
self.source_map.as_ref().map(|map| sourcemap::parse(map))
|
||||||
|
}
|
||||||
|
|
||||||
/// Same as `Bytecode::link` but with fully qualified name (`file.sol:Math`)
|
/// Same as `Bytecode::link` but with fully qualified name (`file.sol:Math`)
|
||||||
pub fn link_fully_qualified(&mut self, name: impl AsRef<str>, addr: Address) -> bool {
|
pub fn link_fully_qualified(&mut self, name: impl AsRef<str>, addr: Address) -> bool {
|
||||||
if let Some((file, lib)) = name.as_ref().split_once(':') {
|
if let Some((file, lib)) = name.as_ref().split_once(':') {
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
#![doc = include_str ! ("../README.md")]
|
#![doc = include_str ! ("../README.md")]
|
||||||
|
|
||||||
pub mod artifacts;
|
pub mod artifacts;
|
||||||
|
pub mod sourcemap;
|
||||||
|
|
||||||
pub use artifacts::{CompilerInput, CompilerOutput, EvmVersion};
|
pub use artifacts::{CompilerInput, CompilerOutput, EvmVersion};
|
||||||
use std::collections::btree_map::Entry;
|
use std::collections::btree_map::Entry;
|
||||||
|
|
|
@ -0,0 +1,528 @@
|
||||||
|
use std::{fmt, fmt::Write, iter::Peekable, str::CharIndices};
|
||||||
|
|
||||||
|
type Spanned<Token, Loc, Error> = Result<(Token, Loc), Error>;
|
||||||
|
|
||||||
|
macro_rules! syntax_err {
|
||||||
|
($msg:expr) => {{
|
||||||
|
Err(SyntaxError::new($msg))
|
||||||
|
}};
|
||||||
|
($msg:expr, $($tt:tt)*) => {{
|
||||||
|
Err(SyntaxError::new(format!($msg, $($tt)*)))
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
/// An error that can happen during source map parsing.
|
||||||
|
#[derive(Debug, Clone, thiserror::Error)]
|
||||||
|
#[error("{0}")]
|
||||||
|
pub struct SyntaxError(String);
|
||||||
|
|
||||||
|
impl SyntaxError {
|
||||||
|
pub fn new(s: impl Into<String>) -> Self {
|
||||||
|
SyntaxError(s.into())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(PartialEq)]
|
||||||
|
enum Token<'a> {
|
||||||
|
Number(&'a str),
|
||||||
|
Semicolon,
|
||||||
|
Colon,
|
||||||
|
/// `i` which represents an instruction that goes into a function
|
||||||
|
In,
|
||||||
|
/// `o` which represents an instruction that returns from a function
|
||||||
|
Out,
|
||||||
|
/// `-` regular jump
|
||||||
|
Regular,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Debug for Token<'a> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
Token::Number(s) => write!(f, "NUMBER({:?})", s),
|
||||||
|
Token::Semicolon => write!(f, "SEMICOLON"),
|
||||||
|
Token::Colon => write!(f, "COLON"),
|
||||||
|
Token::In => write!(f, "JMP(i)"),
|
||||||
|
Token::Out => write!(f, "JMP(o)"),
|
||||||
|
Token::Regular => write!(f, "JMP(-)"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Display for Token<'a> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
Token::Number(_) => write!(f, "number"),
|
||||||
|
Token::Semicolon => write!(f, "`;`"),
|
||||||
|
Token::Colon => write!(f, "`:`"),
|
||||||
|
Token::In => write!(f, "jmp-in"),
|
||||||
|
Token::Out => write!(f, "jmp-out"),
|
||||||
|
Token::Regular => write!(f, "jmp"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TokenStream<'input> {
|
||||||
|
input: &'input str,
|
||||||
|
chars: Peekable<CharIndices<'input>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'input> TokenStream<'input> {
|
||||||
|
pub fn new(input: &'input str) -> TokenStream<'input> {
|
||||||
|
TokenStream { chars: input.char_indices().peekable(), input }
|
||||||
|
}
|
||||||
|
|
||||||
|
fn number(
|
||||||
|
&mut self,
|
||||||
|
start: usize,
|
||||||
|
mut end: usize,
|
||||||
|
) -> Option<Spanned<Token<'input>, usize, SyntaxError>> {
|
||||||
|
loop {
|
||||||
|
if let Some((_, ch)) = self.chars.peek().cloned() {
|
||||||
|
if !ch.is_ascii_digit() {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
self.chars.next();
|
||||||
|
end += 1;
|
||||||
|
} else {
|
||||||
|
end = self.input.len();
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Some(Ok((Token::Number(&self.input[start..end]), start)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'input> Iterator for TokenStream<'input> {
|
||||||
|
type Item = Spanned<Token<'input>, usize, SyntaxError>;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
match self.chars.next()? {
|
||||||
|
(i, ';') => Some(Ok((Token::Semicolon, i))),
|
||||||
|
(i, ':') => Some(Ok((Token::Colon, i))),
|
||||||
|
(i, 'i') => Some(Ok((Token::In, i))),
|
||||||
|
(i, 'o') => Some(Ok((Token::Out, i))),
|
||||||
|
(start, '-') => match self.chars.peek() {
|
||||||
|
Some((_, ch)) if ch.is_ascii_digit() => {
|
||||||
|
self.chars.next();
|
||||||
|
self.number(start, start + 2)
|
||||||
|
}
|
||||||
|
_ => Some(Ok((Token::Regular, start))),
|
||||||
|
},
|
||||||
|
(start, ch) if ch.is_ascii_digit() => self.number(start, start + 1),
|
||||||
|
(i, c) => Some(syntax_err!("Unexpected input {} at {}", c, i)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy, Eq, PartialEq, Hash)]
|
||||||
|
pub enum Jump {
|
||||||
|
/// A jump instruction that goes into a function
|
||||||
|
In,
|
||||||
|
/// A jump represents an instruction that returns from a function
|
||||||
|
Out,
|
||||||
|
/// A regular jump instruction
|
||||||
|
Regular,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl AsRef<str> for Jump {
|
||||||
|
fn as_ref(&self) -> &str {
|
||||||
|
match self {
|
||||||
|
Jump::In => "i",
|
||||||
|
Jump::Out => "o",
|
||||||
|
Jump::Regular => "-",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Display for Jump {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
f.write_str(self.as_ref())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Represents a whole source map as list of `SourceElement`s
|
||||||
|
///
|
||||||
|
/// See also https://docs.soliditylang.org/en/latest/internals/source_mappings.html#source-mappings
|
||||||
|
pub type SourceMap = Vec<SourceElement>;
|
||||||
|
|
||||||
|
/// Represents a single element in the source map
|
||||||
|
/// A solidity source map entry takes the following form
|
||||||
|
///
|
||||||
|
/// before 0.6.0
|
||||||
|
/// s:l:f:j
|
||||||
|
///
|
||||||
|
/// after 0.6.0
|
||||||
|
/// s:l:f:j:m
|
||||||
|
///
|
||||||
|
/// Where s is the byte-offset to the start of the range in the source file, l is the length of the
|
||||||
|
/// source range in bytes and f is the source index.
|
||||||
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
|
pub struct SourceElement {
|
||||||
|
/// The byte-offset to the start of the range in the source file
|
||||||
|
pub offset: usize,
|
||||||
|
/// The length of the source range in bytes
|
||||||
|
pub length: usize,
|
||||||
|
/// the source index
|
||||||
|
///
|
||||||
|
/// Note: In the case of instructions that are not associated with any particular source file,
|
||||||
|
/// the source mapping assigns an integer identifier of -1. This may happen for bytecode
|
||||||
|
/// sections stemming from compiler-generated inline assembly statements.
|
||||||
|
/// This case is represented as a `None` value
|
||||||
|
pub index: Option<u32>,
|
||||||
|
/// Jump instruction
|
||||||
|
pub jump: Jump,
|
||||||
|
/// “modifier depth”. This depth is increased whenever the placeholder statement (_) is entered
|
||||||
|
/// in a modifier and decreased when it is left again.
|
||||||
|
pub modifier_depth: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Display for SourceElement {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
write!(
|
||||||
|
f,
|
||||||
|
"{}:{}:{}:{}:{}",
|
||||||
|
self.offset,
|
||||||
|
self.length,
|
||||||
|
self.index.map(|i| i as i64).unwrap_or(-1),
|
||||||
|
self.jump,
|
||||||
|
self.modifier_depth
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Default)]
|
||||||
|
struct SourceElementBuilder {
|
||||||
|
pub offset: Option<usize>,
|
||||||
|
pub length: Option<usize>,
|
||||||
|
pub index: Option<Option<u32>>,
|
||||||
|
pub jump: Option<Jump>,
|
||||||
|
pub modifier_depth: Option<usize>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> fmt::Display for SourceElementBuilder {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
if self.offset.is_none() &&
|
||||||
|
self.length.is_none() &&
|
||||||
|
self.index.is_none() &&
|
||||||
|
self.jump.is_none() &&
|
||||||
|
self.modifier_depth.is_none()
|
||||||
|
{
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
if let Some(s) = self.offset {
|
||||||
|
if self.index == Some(None) {
|
||||||
|
f.write_str("-1")?;
|
||||||
|
} else {
|
||||||
|
s.fmt(f)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if self.length.is_none() &&
|
||||||
|
self.index.is_none() &&
|
||||||
|
self.jump.is_none() &&
|
||||||
|
self.modifier_depth.is_none()
|
||||||
|
{
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
f.write_char(':')?;
|
||||||
|
|
||||||
|
if let Some(s) = self.length {
|
||||||
|
if self.index == Some(None) {
|
||||||
|
f.write_str("-1")?;
|
||||||
|
} else {
|
||||||
|
s.fmt(f)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if self.index.is_none() && self.jump.is_none() && self.modifier_depth.is_none() {
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
f.write_char(':')?;
|
||||||
|
|
||||||
|
if let Some(s) = self.index {
|
||||||
|
let s = s.map(|s| s as i64).unwrap_or(-1);
|
||||||
|
s.fmt(f)?;
|
||||||
|
}
|
||||||
|
if self.jump.is_none() && self.modifier_depth.is_none() {
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
f.write_char(':')?;
|
||||||
|
|
||||||
|
if let Some(s) = self.jump {
|
||||||
|
s.fmt(f)?;
|
||||||
|
}
|
||||||
|
if self.modifier_depth.is_none() {
|
||||||
|
return Ok(())
|
||||||
|
}
|
||||||
|
f.write_char(':')?;
|
||||||
|
|
||||||
|
if let Some(s) = self.modifier_depth {
|
||||||
|
if self.index == Some(None) {
|
||||||
|
f.write_str("-1")?;
|
||||||
|
} else {
|
||||||
|
s.fmt(f)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl SourceElementBuilder {
|
||||||
|
fn finish(self, prev: Option<SourceElement>) -> Result<SourceElement, SyntaxError> {
|
||||||
|
let element = if let Some(prev) = prev {
|
||||||
|
SourceElement {
|
||||||
|
offset: self.offset.unwrap_or(prev.offset),
|
||||||
|
length: self.length.unwrap_or(prev.length),
|
||||||
|
index: self.index.unwrap_or(prev.index),
|
||||||
|
jump: self.jump.unwrap_or(prev.jump),
|
||||||
|
modifier_depth: self.modifier_depth.unwrap_or(prev.modifier_depth),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
SourceElement {
|
||||||
|
offset: self.offset.ok_or_else(|| SyntaxError::new("No previous offset"))?,
|
||||||
|
length: self.length.ok_or_else(|| SyntaxError::new("No previous length"))?,
|
||||||
|
index: self.index.ok_or_else(|| SyntaxError::new("No previous index"))?,
|
||||||
|
jump: self.jump.ok_or_else(|| SyntaxError::new("No previous jump"))?,
|
||||||
|
modifier_depth: self.modifier_depth.unwrap_or_default(),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
Ok(element)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_jmp(&mut self, jmp: Jump, i: usize) -> Option<SyntaxError> {
|
||||||
|
if self.jump.is_some() {
|
||||||
|
return Some(SyntaxError::new(format!("Jump already set: {}", i)))
|
||||||
|
}
|
||||||
|
self.jump = Some(jmp);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_offset(&mut self, offset: usize, i: usize) -> Option<SyntaxError> {
|
||||||
|
if self.offset.is_some() {
|
||||||
|
return Some(SyntaxError::new(format!("Offset already set: {}", i)))
|
||||||
|
}
|
||||||
|
self.offset = Some(offset);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_length(&mut self, length: usize, i: usize) -> Option<SyntaxError> {
|
||||||
|
if self.length.is_some() {
|
||||||
|
return Some(SyntaxError::new(format!("Length already set: {}", i)))
|
||||||
|
}
|
||||||
|
self.length = Some(length);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_index(&mut self, index: Option<u32>, i: usize) -> Option<SyntaxError> {
|
||||||
|
if self.index.is_some() {
|
||||||
|
return Some(SyntaxError::new(format!("Index already set: {}", i)))
|
||||||
|
}
|
||||||
|
self.index = Some(index);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set_modifier(&mut self, modifier_depth: usize, i: usize) -> Option<SyntaxError> {
|
||||||
|
if self.modifier_depth.is_some() {
|
||||||
|
return Some(SyntaxError::new(format!("Modifier depth already set: {}", i)))
|
||||||
|
}
|
||||||
|
self.modifier_depth = Some(modifier_depth);
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Parser<'input> {
|
||||||
|
stream: TokenStream<'input>,
|
||||||
|
last_element: Option<SourceElement>,
|
||||||
|
done: bool,
|
||||||
|
#[cfg(test)]
|
||||||
|
output: Option<&'input mut dyn Write>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'input> Parser<'input> {
|
||||||
|
pub fn new(input: &'input str) -> Self {
|
||||||
|
Self {
|
||||||
|
stream: TokenStream::new(input),
|
||||||
|
last_element: None,
|
||||||
|
done: false,
|
||||||
|
#[cfg(test)]
|
||||||
|
output: None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! parse_number {
|
||||||
|
($num:expr, $pos:expr) => {{
|
||||||
|
let num = match $num.parse::<i64>() {
|
||||||
|
Ok(num) => num,
|
||||||
|
Err(_) => {
|
||||||
|
return Some(syntax_err!(
|
||||||
|
"Expected {} to be a `{}` at {}",
|
||||||
|
$num,
|
||||||
|
stringify!($t),
|
||||||
|
$pos
|
||||||
|
))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
match num {
|
||||||
|
i if i < -1 => {
|
||||||
|
return Some(syntax_err!("Unexpected negative identifier of `{}` at {}", i, $pos))
|
||||||
|
}
|
||||||
|
-1 => None,
|
||||||
|
i => Some(i as u32),
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! bail_opt {
|
||||||
|
($opt:stmt) => {
|
||||||
|
if let Some(err) = { $opt } {
|
||||||
|
return Some(Err(err))
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'input> Iterator for Parser<'input> {
|
||||||
|
type Item = Result<SourceElement, SyntaxError>;
|
||||||
|
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
// start parsing at the offset state, `s`
|
||||||
|
let mut state = State::Offset;
|
||||||
|
let mut builder = SourceElementBuilder::default();
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match self.stream.next() {
|
||||||
|
Some(Ok((token, pos))) => match token {
|
||||||
|
Token::Semicolon => break,
|
||||||
|
Token::Number(num) => match state {
|
||||||
|
State::Offset => {
|
||||||
|
bail_opt!(builder.set_offset(
|
||||||
|
parse_number!(num, pos).unwrap_or_default() as usize,
|
||||||
|
pos
|
||||||
|
))
|
||||||
|
}
|
||||||
|
State::Length => {
|
||||||
|
bail_opt!(builder.set_length(
|
||||||
|
parse_number!(num, pos).unwrap_or_default() as usize,
|
||||||
|
pos
|
||||||
|
))
|
||||||
|
}
|
||||||
|
State::Index => {
|
||||||
|
bail_opt!(builder.set_index(parse_number!(num, pos), pos))
|
||||||
|
}
|
||||||
|
State::Modifier => {
|
||||||
|
bail_opt!(builder.set_modifier(
|
||||||
|
parse_number!(num, pos).unwrap_or_default() as usize,
|
||||||
|
pos
|
||||||
|
))
|
||||||
|
}
|
||||||
|
State::Jmp => {
|
||||||
|
return Some(syntax_err!("Expected Jump found number at {}", pos))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Token::Colon => {
|
||||||
|
bail_opt!(state.advance(pos))
|
||||||
|
}
|
||||||
|
Token::In => {
|
||||||
|
bail_opt!(builder.set_jmp(Jump::In, pos))
|
||||||
|
}
|
||||||
|
Token::Out => {
|
||||||
|
bail_opt!(builder.set_jmp(Jump::Out, pos))
|
||||||
|
}
|
||||||
|
Token::Regular => {
|
||||||
|
bail_opt!(builder.set_jmp(Jump::Regular, pos))
|
||||||
|
}
|
||||||
|
},
|
||||||
|
Some(Err(err)) => return Some(Err(err)),
|
||||||
|
None => {
|
||||||
|
if self.done {
|
||||||
|
return None
|
||||||
|
}
|
||||||
|
self.done = true;
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
{
|
||||||
|
if let Some(out) = self.output.as_mut() {
|
||||||
|
if self.last_element.is_some() {
|
||||||
|
let _ = out.write_char(';');
|
||||||
|
}
|
||||||
|
let _ = out.write_str(&builder.to_string());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let element = match builder.finish(self.last_element.take()) {
|
||||||
|
Ok(element) => {
|
||||||
|
self.last_element = Some(element.clone());
|
||||||
|
Ok(element)
|
||||||
|
}
|
||||||
|
Err(err) => Err(err),
|
||||||
|
};
|
||||||
|
Some(element)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// State machine to keep track of separating `:`
|
||||||
|
#[derive(Clone, PartialEq, Eq, Copy)]
|
||||||
|
enum State {
|
||||||
|
// s
|
||||||
|
Offset,
|
||||||
|
// l
|
||||||
|
Length,
|
||||||
|
// f
|
||||||
|
Index,
|
||||||
|
// j
|
||||||
|
Jmp,
|
||||||
|
// m
|
||||||
|
Modifier,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl State {
|
||||||
|
fn advance(&mut self, i: usize) -> Option<SyntaxError> {
|
||||||
|
match self {
|
||||||
|
State::Offset => *self = State::Length,
|
||||||
|
State::Length => *self = State::Index,
|
||||||
|
State::Index => *self = State::Jmp,
|
||||||
|
State::Jmp => *self = State::Modifier,
|
||||||
|
State::Modifier => return Some(SyntaxError::new(format!("unexpected colon at {}", i))),
|
||||||
|
}
|
||||||
|
None
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Parses a source map
|
||||||
|
pub fn parse(input: &str) -> Result<SourceMap, SyntaxError> {
|
||||||
|
Parser::new(input).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[allow(unused)]
|
||||||
|
fn tokenize(s: &str) -> Vec<Spanned<Token, usize, SyntaxError>> {
|
||||||
|
TokenStream::new(s).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_parse_source_maps() {
|
||||||
|
// all source maps from the compiler output test data
|
||||||
|
let source_maps = include_str!("../test-data/out-source-maps.txt");
|
||||||
|
|
||||||
|
for (line, s) in source_maps.lines().enumerate() {
|
||||||
|
parse(s).unwrap_or_else(|_| panic!("Failed to parse line {}", line));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn can_parse_foundry_cheatcodes_sol_maps() {
|
||||||
|
let s = include_str!("../test-data/cheatcodes.sol-sourcemap.txt");
|
||||||
|
let mut out = String::new();
|
||||||
|
let mut parser = Parser::new(s);
|
||||||
|
parser.output = Some(&mut out);
|
||||||
|
let _map = parser.collect::<Result<SourceMap, _>>().unwrap();
|
||||||
|
assert_eq!(out, s);
|
||||||
|
}
|
||||||
|
}
|
File diff suppressed because one or more lines are too long
|
@ -0,0 +1,25 @@
|
||||||
|
25:64:0:-;;;47:40;8:9:-1;5:2;;;30:1;27;20:12;5:2;47:40:0;74:8;;
|
||||||
|
93:467:0:-:0;;;146:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;193:60;;;;;;;;;;;;;;;;;;243:9;193:11;;;;;:60;;:::i;:::-;274:9;263:8;:20;;;;;;;;;;;;:::i;:::-;;146:144;93:467;;6021:141:1;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;93:467:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;93:467:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
147:1787:0:-:0;;;261:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;299:80;312:66;299:80;;:12;;;:80;;:::i;:::-;398;411:66;398:80;;:12;;;:80;;:::i;:::-;500;513:66;500:80;;:12;;;:80;;:::i;:::-;599:60;;;;;;;;;;;;;;;;;;649:9;599:11;;;;;:60;;:::i;:::-;661:80;674:66;661:80;;:12;;;:80;;:::i;:::-;763;776:66;763:80;;:12;;;:80;;:::i;:::-;873:9;862:8;:20;;;;;;;;;;;;:::i;:::-;;261:628;147:1787;;166:59;;:::o;6021:141:1:-;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;147:1787:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;147:1787:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
93:467:0:-:0;;;146:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;193:60;;;;;;;;;;;;;;;;;;243:9;193:11;;;;;:60;;:::i;:::-;274:9;263:8;:20;;;;;;;;;;;;:::i;:::-;;146:144;93:467;;6021:141:1;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;93:467:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;93:467:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
147:1787:0:-:0;;;261:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;299:80;312:66;299:80;;:12;;;:80;;:::i;:::-;398;411:66;398:80;;:12;;;:80;;:::i;:::-;500;513:66;500:80;;:12;;;:80;;:::i;:::-;599:60;;;;;;;;;;;;;;;;;;649:9;599:11;;;;;:60;;:::i;:::-;661:80;674:66;661:80;;:12;;;:80;;:::i;:::-;763;776:66;763:80;;:12;;;:80;;:::i;:::-;873:9;862:8;:20;;;;;;;;;;;;:::i;:::-;;261:628;147:1787;;166:59;;:::o;6021:141:1:-;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;147:1787:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;147:1787:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
93:467:0:-:0;;;146:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;193:60;;;;;;;;;;;;;;;;;;243:9;193:11;;;;;:60;;:::i;:::-;274:9;263:8;:20;;;;;;;;;;;;:::i;:::-;;146:144;93:467;;6021:141:1;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;93:467:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;93:467:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
147:1787:0:-:0;;;261:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;299:80;312:66;299:80;;:12;;;:80;;:::i;:::-;398;411:66;398:80;;:12;;;:80;;:::i;:::-;500;513:66;500:80;;:12;;;:80;;:::i;:::-;599:60;;;;;;;;;;;;;;;;;;649:9;599:11;;;;;:60;;:::i;:::-;661:80;674:66;661:80;;:12;;;:80;;:::i;:::-;763;776:66;763:80;;:12;;;:80;;:::i;:::-;873:9;862:8;:20;;;;;;;;;;;;:::i;:::-;;261:628;147:1787;;166:59;;:::o;6021:141:1:-;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;147:1787:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;147:1787:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
93:467:0:-:0;;;146:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;193:60;;;;;;;;;;;;;;;;;;243:9;193:11;;;;;:60;;:::i;:::-;274:9;263:8;:20;;;;;;;;;;;;:::i;:::-;;146:144;93:467;;6021:141:1;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;93:467:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;93:467:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
147:1787:0:-:0;;;261:628;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;299:80;312:66;299:80;;:12;;;:80;;:::i;:::-;398;411:66;398:80;;:12;;;:80;;:::i;:::-;500;513:66;500:80;;:12;;;:80;;:::i;:::-;599:60;;;;;;;;;;;;;;;;;;649:9;599:11;;;;;:60;;:::i;:::-;661:80;674:66;661:80;;:12;;;:80;;:::i;:::-;763;776:66;763:80;;:12;;;:80;;:::i;:::-;873:9;862:8;:20;;;;;;;;;;;;:::i;:::-;;261:628;147:1787;;166:59;;:::o;6021:141:1:-;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;147:1787:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;147:1787:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
93:467:0:-:0;;;146:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;193:60;;;;;;;;;;;;;;;;;;243:9;193:11;;;;;:60;;:::i;:::-;274:9;263:8;:20;;;;;;;;;;;;:::i;:::-;;146:144;93:467;;6021:141:1;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;93:467:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;93:467:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
25:21:0:-:0;;;;;;;;;;;;;;;;;;;
|
||||||
|
93:467:0:-:0;;;146:144;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;193:60;;;;;;;;;;;;;;;;;;243:9;193:11;;;;;:60;;:::i;:::-;274:9;263:8;:20;;;;;;;;;;;;:::i;:::-;;146:144;93:467;;6021:141:1;6088:70;6150:2;6154;6104:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6088:15;;;:70;;:::i;:::-;6021:141;;:::o;176:288::-;240:21;264:7;:14;240:38;;282:22;129:42;282:40;;373:2;364:7;360:16;455:1;452;437:13;423:12;407:14;400:5;389:68;335:126;;;;;:::o;93:467:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:354:2:-;96:5;121:66;137:49;179:6;137:49;:::i;:::-;121:66;:::i;:::-;112:75;;210:6;203:5;196:21;248:4;241:5;237:16;286:3;277:6;272:3;268:16;265:25;262:2;;;303:1;300;293:12;262:2;316:39;348:6;343:3;338;316:39;:::i;:::-;102:259;;;;;;:::o;381:288::-;448:5;497:3;490:4;482:6;478:17;474:27;464:2;;515:1;512;505:12;464:2;548:6;542:13;573:90;659:3;651:6;644:4;636:6;632:17;573:90;:::i;:::-;564:99;;454:215;;;;;:::o;675:390::-;755:6;804:2;792:9;783:7;779:23;775:32;772:2;;;820:1;817;810:12;772:2;884:1;873:9;869:17;863:24;914:18;906:6;903:30;900:2;;;946:1;943;936:12;900:2;974:74;1040:7;1031:6;1020:9;1016:22;974:74;:::i;:::-;964:84;;834:224;762:303;;;;:::o;1071:364::-;1159:3;1187:39;1220:5;1187:39;:::i;:::-;1242:71;1306:6;1301:3;1242:71;:::i;:::-;1235:78;;1322:52;1367:6;1362:3;1355:4;1348:5;1344:16;1322:52;:::i;:::-;1399:29;1421:6;1399:29;:::i;:::-;1394:3;1390:39;1383:46;;1163:272;;;;;:::o;1441:514::-;1602:4;1640:2;1629:9;1625:18;1617:26;;1689:9;1683:4;1679:20;1675:1;1664:9;1660:17;1653:47;1717:78;1790:4;1781:6;1717:78;:::i;:::-;1709:86;;1842:9;1836:4;1832:20;1827:2;1816:9;1812:18;1805:48;1870:78;1943:4;1934:6;1870:78;:::i;:::-;1862:86;;1607:348;;;;;:::o;1961:129::-;1995:6;2022:20;;:::i;:::-;2012:30;;2051:33;2079:4;2071:6;2051:33;:::i;:::-;2002:88;;;:::o;2096:75::-;2129:6;2162:2;2156:9;2146:19;;2136:35;:::o;2177:308::-;2239:4;2329:18;2321:6;2318:30;2315:2;;;2351:18;;:::i;:::-;2315:2;2389:29;2411:6;2389:29;:::i;:::-;2381:37;;2473:4;2467;2463:15;2455:23;;2244:241;;;:::o;2491:99::-;2543:6;2577:5;2571:12;2561:22;;2550:40;;;:::o;2596:169::-;2680:11;2714:6;2709:3;2702:19;2754:4;2749:3;2745:14;2730:29;;2692:73;;;;:::o;2771:307::-;2839:1;2849:113;2863:6;2860:1;2857:13;2849:113;;;2948:1;2943:3;2939:11;2933:18;2929:1;2924:3;2920:11;2913:39;2885:2;2882:1;2878:10;2873:15;;2849:113;;;2980:6;2977:1;2974:13;2971:2;;;3060:1;3051:6;3046:3;3042:16;3035:27;2971:2;2820:258;;;;:::o;3084:320::-;3128:6;3165:1;3159:4;3155:12;3145:22;;3212:1;3206:4;3202:12;3233:18;3223:2;;3289:4;3281:6;3277:17;3267:27;;3223:2;3351;3343:6;3340:14;3320:18;3317:38;3314:2;;;3370:18;;:::i;:::-;3314:2;3135:269;;;;:::o;3410:281::-;3493:27;3515:4;3493:27;:::i;:::-;3485:6;3481:40;3623:6;3611:10;3608:22;3587:18;3575:10;3572:34;3569:62;3566:2;;;3634:18;;:::i;:::-;3566:2;3674:10;3670:2;3663:22;3453:238;;;:::o;3697:180::-;3745:77;3742:1;3735:88;3842:4;3839:1;3832:15;3866:4;3863:1;3856:15;3883:180;3931:77;3928:1;3921:88;4028:4;4025:1;4018:15;4052:4;4049:1;4042:15;4069:102;4110:6;4161:2;4157:7;4152:2;4145:5;4141:14;4137:28;4127:38;;4117:54;;;:::o;93:467:0:-;;;;;;;
|
||||||
|
67:61980:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
25:13:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25:13:0;;;;;;;
|
||||||
|
0:13:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;0:13:0;;;;;;;
|
||||||
|
25:21:0:-:0;;;;;;;;;;;;;;;;;;;
|
Loading…
Reference in New Issue